对象在创建时构造函数的调用顺序
-
调用父类的构造函数;
-
调用成员变量的构造函数;
-
调用类自身的构造函数
如果通过“父类::函数名”来在子类中访问父类的函数,此时不论该函数是否为虚函数,都会直接调用父类对应的函数
子类对象析构时的顺序
- 析构函数的调用函数与构造函数相反
1.执行自身的析构函数;
2.执行成员变量的析构函数;
3.执行父类的析构函数
可看一下下面这个例子:
#include<iostream>
#include<string>
using namespace std;
class A {
string a;
public:
A() {
cout << "A()" << endl;
}
A(string aa) {
cout << "A(string aa) :" << aa << endl;
a = aa;
}
~A() {
cout << "~A() :" << a << endl;
}
virtual void vt() {
cout << "vt A()" << endl;
}
};
class B : public A{
A a1;
string b;
public:
B() : a1("default") {
cout << "B()" << endl;
b = "default";
}
B(string bb) : A(bb),a1(bb + "1") {
cout << "B(string bb):" << bb << endl;
b = bb;
}
void vt() {
cout << "vt B()" << endl;
A::vt();
}
~B() {
cout << "~B():" << b << endl;
}
};
int main(void) {
B b("bb");
cout << endl;
A *a1 = new B;
a1 -> vt();
delete a1;
cout << endl;
return 0;
}
执行结果为:
A(string aa) :bb
A(string aa) :bb1
B(string bb):bb
A()
A(string aa) :default
B()
vt B()
vt A()
~A() :
~B():bb
~A() :bb1
~A() :bb