#includeusing namespace std; class A { public: A() { cout << "A"; } A(int x) { cout << "A" << x; } ~A() { cout << "~A"; } }; class B: public A { public: B() { cout << "B"; } B(int x) { cout << "B" << x; } ~B() { cout << "~B"; } };
(1)定义子类对象时,会先调用父类的构造函数,再调用子类的构造函数。析构函数调用顺序和构造函数相反。
int main()
{
B tmp;
return 0;
}
输出结果
AB~B~A
(2)用带参数的构造函数定义子类对象时,会先调用父类的无参构造函数,再调用子类的带参数构函数。析构函数调用顺序和构造函数相反。
int main()
{
B tmp(1);
return 0;
}
输出结果
AB1~B~A2.虚函数
若父类和子类定义同名虚函数,子类对象调用该虚函数时,只会调用子类的虚函数。
#includeusing namespace std; class Base { public: virtual void show() { cout << "base class" << endl; } }; class Subclass: public Base { public: virtual void show() { cout << "base subclass" << endl; } }; int main() { Subclass tmp; tmp.show(); return 0; }
输出结果
base subclass



