测试析构函数、虚函数、纯虚函数:
void testClass5() {
class Parent {
public:
Parent(int x) { cout << "Parent构造: " << x << endl; }
~Parent() {
cout << "调用Parent析构函数" << endl;
}
virtual string toString() { // 虚函数
return "i am Parent";
}
virtual int getAge() const = 0; // =0 标记为纯虚函数
};
class Child : public Parent {
private:
int a;
string b;
public:
// 调用父类构造 + 初始化子类成员
Child(int x, int val, const string& s) : Parent(x), a(val), b(s) {
cout << "Child构造: " << a << ", " << b << endl;
}
~Child() {
cout << "调用Child析构函数" << endl;
}
string toString() override {
return "i am Child";
}
int getAge() const override {
return 18;
}
};
Child child(10, 20, "hello");
cout << "child toString:" << child.toString() << endl;
cout << "child getAge:" << child.getAge() << endl;
Parent* parent = &child;
cout << "parent toString:" << parent->toString() << endl;
cout << "parent getAge:" << parent->getAge() << endl;
}
打印:
可见,析构函数的调用顺序是和构造函数的调用顺序相反的。另外,纯虚函数有点像java的抽象方法。