가상 함수의 동작 예를 살펴 보겠습니다. 이 테스트 코드가 주어지면 그 동작에 대해 몇 가지 질문이 있습니다.가상 함수 서명 불일치 및 그 동작
class A
{
public:
A(int x)
{
cout << "In A Constructor" << endl;
print();
}
~A(){
cout << "In A Destructor" << endl;
delete _val;
}
virtual void print() { cout << "A." << endl; }
private:
char* _val;
};
class B: public A
{
public:
B(int x, int y) : A(x)
{
_dVal = new char[y];
cout << "In B Constructor 1" << endl;
print();
}
B() : A(0)
{
_dVal = new char[1];
cout << "In B Constructor 2" << endl;
print();
}
~B(){
cout << "In B Destructor" << endl;
delete _dVal;
}
void print() { cout << "B" << endl; }
private:
char* _dVal;
};
int main(int argc, char** argv) {
A* p1 = new B();
p1->print();
delete p1;
return 0;
}
출력은 :
클래스 A가 가상 함수로 나타내는 단 하나이고, 그것은 역 참조 (호출되는 경우 인쇄 클래스 B 요구되는 이유In A Constructor
A.
In B Constructor 2
B
B
In A Destructor
1) ->)? 2) 생성자가 실제로 호출되는 경우 B의 소멸자가 호출되지 않는 이유는 무엇입니까?
함수가 기본 클래스에서 가상 인 경우 모든 파생 클래스에서도 가상 함수입니다. 소멸자에게도 마찬가지입니다. –
질문 당 한 가지 질문하십시오. –