//Description: C++, virtual function
//Create Date: 2020-07-16 17:38:59
//Author: channy
class A {
public:
A(int _val = 0) {
val = _val;
cout << "create A " << val << endl;
}
virtual ~A() {
cout << "destroy A " << val << endl;
}
void fun() {
cout << "funcA " << val << endl;
}
virtual void vFun() {
cout << "vFunA " << val << endl;
}
int val;
};
class B : public A {
public:
B(int _val = 0) : A(_val) {
cout << "create B " << val << endl;
}
virtual ~B() {
cout << "destroy B " << val << endl;
}
void fun() {
cout << "funcB " << val << endl;
}
virtual void vFun() {
cout << "vFunB " << val << endl;
}
};
A a(1);
a.fun();
a.vFun();
cout << "----" << endl;
B b(2);
b.fun();
b.vFun();
cout << "----" << endl;
A c = B(3);
c.fun();
c.vFun();
cout << "----" << endl;
create A 1
funcA 1
vFunA 1
----
create A 2
create B 2
funcB 2
vFunB 2
----
create A 3
create B 3
destroy B 3
destroy A 3
funcA 3
vFunA 3
----
destroy A 3
destroy B 2
destroy A 2
destroy A 1
构造函数: 先父类后子类, 不能是virtual
析构函数:
非virtual类,先子类后父类
virtual类, 先子类后父类
重写函数: 只子类
虚函数: 只子类
构造函数: 先父类后子类,会调用析构函数析构掉子类和构造子类时产生的父类
析构函数: 父类
重写函数: 父类
虚函数: 父类