국기 정규수업 19일차 메모

2015. 3. 30. 20:02창고

728x90
728x90

19일차 메모
malloc,free vs new,delete
 1. 함수 vs 연산자(오버로딩이 가능)
 2. malloc,free는 생성자와 소멸자를 호출하지 않음. new, delete는 생성자와 소멸자를 호출한다.
 3. 보이드형 포인터로 받아서 delete를 사용하면 소멸자가 호출이 안된다.
 하지만 명시적 형변환을 해주면 delete를 호출하면 소멸자가 호출된다.


인자로 나와 같은 타입이 된다면?

 나와 동일한 타입의 객체가 인자로 올때는 자기 자신인지 꼭 확인한다!
 if( this == &rhw) { return *this; }

이건 몰랐던건데 아주 유용할것 같다. 얏빠리 센세의 가르침!! 


this는 자신을 가리키는 포인터와 비슷하다고 생각하면 된다.

 해당 객체의 자체, 첫 번째 주소를 가리키는 녀석.

 this를 이용해서 객체 자신을 뱉어줄 수 있다.
 한마디로 - 외부에서 오는 객체와 구분이 가능하다.

 

가상/증강
 가상 - 존재하지 않는 것을 존재하는것처럼 가상세계를 만드는 것.
 증강 - 현실을 기반으로 한 가상현실. 사물 인터넷. ICT. 유비쿼터스.

 

**가상함수
 - 정해져있지 않은 것. 기능이! 가상함수란 기능이 정해져있지 않은 함수! <- 중요!
 - virtual 키워드를 함수 앞에 붙이면 된다.
 - 이 가상함수를 알려면? 1. 상속을 알아야 함. 2. virtual 키워드를 사용하면 어떤 일이 생기나?
 - 가상함수 -> 가상함수(정해져있지않은)와 순수 가상함수(존재하지 않는)
 - 순수 가상함수가 구현되지 않으면 그 자식은 인스턴스화! 될 수 없다.
 - -> 그래서 이 순수 가상함수를 클래스를 추상클래스라고 한다.
 - 런타임 시에 호출할 대상이 정해진다. 메모리에 인스턴스화 되어있는 타입으로 호출 가능하다.

 

***virtual 키워드가 붙으면 클래스 내부에 어떤 일이 생기나?
 - 4바이트의 가상 함수 테이블이 생긴다.(여러개의 주소들이 있는 테이블 - 함수포인터)
 - 계층 구조로 나중에 확인할 수 있다. 오버라이딩(함수 재정의)이 주 목적이다.
 virtual 정리
 - 1. 4바이트 가상 함수 테이블이 생긴다. RTTI와 무관하지 않다. 런 타임시에 어떤 타입?
 - 2. virtual 붙은 함수는 가상함수가 된다. 가상 함수 or 순수 가상 함수가 있다.
 - 3. 오버라이딩이 가능하게 해준다.

 

***가상함수 vs 순수가상함수
 keyword - implement, interface
 추상클래스는 인터페이스를 주 목적으로 사용한다. 강제성을 띄는 인터페이스 상속.
 규약, 규칙을 정하는 성격이 강하다.
 
순수 가상함수는 반드시 재정의를 해야 하는 것은 아니지만,
 만일, 상속 받은 클래스에서 순수 가상 함수를 재정의 하지 않으면 해당 클래스도 추상 클래스가 된다.*
 하지만 상속 받은 클래스는 인스턴스화 될 수 없다.

순수 가상함수는 무조건 재정의 해줘야 된다고 잘못 알고 있었다. 좋은 공부가 되었다.
 
implement 상속, interface 상속! 두 개의 차이를 확실히 알자.
 조상으로부터 그 자식들에게 그 함수들이 반드시 있다. (규칙, 규약으로 정해지는 것 - interface)


오버로딩과 오버라이딩

오버로딩 - 같은 이름으로 다른 기능을 하는 것을 말한다. 반환값에 관계 없이 시그니처가 다르면 다른 기능으로 정의할 수 있다.
오버라이딩 - 클래스 내에 단 한개만 존재하며, 상속 관계에서만 가능하다. 반환값, 함수 이름, 시그니처가 동일해야 한다.
     상위 클래스에 virtual 키워드가 존재하는 함수를 하위 클래스에서 함수를 재정의 하는 것을 말한다.
     고로 딱 한 개 밖에 만들 수 없다. 모두 같아야 하니깐.

virtual가 존재하지않으면 오버라이딩이라고 할 수 없다.




728x90
반응형