관리 메뉴

ComputerVision Jack

[C++프로그래밍 Chapter8] 본문

Programming Language/C++ Programming

[C++프로그래밍 Chapter8]

JackYoon 2020. 1. 29. 11:26
반응형

[객체 포인터의 참조 관계]

객체 포인터 변수 : 객체의 주소 값을 저장하는 포인터 변수

클래스 기반으로도 포인터 변수를 선언할 수 있다.

 

Sample * sp; 

#포인터 변수 선언

 

sp = new Sample();

#포인터 변수 객체 참조

 

여기서 sp형 포인터는 Sample 객체 뿐만 아니라

Sample을 상속하는 유도 클래스의 객체 또한 지칭할 수 있다.

C++에서, Sample형 포인터 변수는 Sample 객체 또는 AAA를 직접 혹은 간접적으로 상속하는

모든 객체를 가리킬 수 있다.(객체의 주소 값을 저장할 수 있다.)

 

One클래스에 func1 함수와 func2 함수가 있는데, 유도 클래스인 Two클래스에도 동일한

이름과 형태로 두 함수를 정의한다.

함수 오버라이딩 되면, 오버라이딩 된 기초 클래스의 함수는, 오버라이딩을 한 유도 클래스의 함수에

가려진다.

[가상함수 Virtual Function]

C++ 컴파일러는 포인터 연산의 가능성 여부를 판단 할 때,

포인터의 자료형을 기준으로 판단한다. 실제 가리키는 객체의 자료형 기준으로 판단하지 않는다.

One * o =new Two();                     컴파일 가능

o->TwoFunc();                              컴파일 에러

 

포인터 형에 해당하는 클래스에 정의된 멤버에만 접근이 가능하다.

 

가상함수(Virtual Function)

가상 함수는 virutal 키워드 선언을 통해서 이루어진다. 

가상함수가 선언되고 나면, 이 함수를 오버라이딩 하는 함수도 가상함수가 된다.

 

해당 함수 호출 시, 포인터의 자료형을 기반으로 호출 대상을 결정하지 않고,

포인터 변수가 실제로 가리키는 객체를 참조하여 호출 대상을 결정한다.

 

순수 가상함수(Pure Virtual Function)와 추상 클래스(Abstract Class)

클래스 중에선 객체 생성을 목적으로 정의 되지 안흔 클래스도 존재한다.

 

순수 가상함수 : 몸체가 정의 되지 않은 함수

virtual int Getter() const = 0;

#명시적으로 몸체를 정의하지 않았음을 컴파일러에게 알리는 것

 

추상 클래스 : 하나 이상의 멤버 함수를 순수 가상함수로 선언한 클래스

추상클래스는 객체 생성이 불가능한 클래스

 

다형성(Polymorphism)

One * o = new One();

o -> ExampleFunc();

 

o = new Two();

o -> ExampleFunc();

#ptr은 동일한 포인터 변수이지만, 실행 결과는 다르다.

[가상 소멸자와 참조자]

가상 함수 말고 소멸자에도 virtual을 붙여줘야 한다.

 

가상 소멸자(Virtual Destructor)

객체의 소멸 과정에서 delete연산자에 사용된 포인터 변수의 자료형에 상관없이 모든 소멸자가 호출되어야 한다.

상속의 맨 위 계층 클래스 소멸자에 virtual선언

메모리의 누수 문제 발생 가능성

 

참조자의 참조가능성

C++에서 Sample형 참조자는 Sample형 객체 또는 Sample을 직접 혹은 간접적으로 상속하는 모든 객체를 참조한다.

 

반응형

'Programming Language > C++ Programming' 카테고리의 다른 글

[C++프로그래밍 Chapter10]  (0) 2020.01.31
[C++프로그래밍 Chapter9]  (0) 2020.01.30
[C++프로그래밍 Chapter7]  (1) 2020.01.28
[C++프로그래밍 Chapter6]  (0) 2020.01.23
[C++프로그래밍 Chapter5]  (2) 2020.01.21
Comments