父类(指针、引用)指向子类对象
1. 父类类型指向子类对象
include <stdlib.h>
#include <iostream>
using namespace std;
class Base_J
{
public:
Base_J()
{
cout << "Base Created" << endl;
}
virtual ~Base_J()
{
cout << "Base Destroyed" << endl;
}
void common_fun()
{
cout << "Base_J, common_fun" << endl;
}
// virtual void common_fun() = 0;
};
class Derived_J : public Base_J
{
public:
Derived_J()
{
cout << "Derived Created" << endl;
}
~Derived_J()
{
cout << "Derived Destroyed" << endl;
}
void common_fun()
{
cout << "Derived_J, common_fun" << endl;
}
};
int main()
{
Derived_J d;
Base_J b2 = d;
b2.common_fun(); // 如果Base_J定义的common_fun是虚函数,则无法通过编译
return 0;
}
运行结果:
user@linux-anju:~/C> ./base
Base Created
Derived Created
Base_J, common_fun
Base Destroyed
Derived Destroyed
Base Destroyed
2. 父类引用指向子类对象
Base_J父类中,common_fun定义为虚函数。
int main()
{
Derived_J d;
Base_J &b2 = d;
b2.common_fun();
return 0;
}
运行结果:
user@linux-anju:~/C> ./base
Base Created
Derived Created
Derived_J, common_fun
Derived Destroyed
Base Destroyed
3. 父类指针指向子类对象
int main()
{
Derived_J d;
Base_J *b3 = &d;
b3->common_fun();
return 0;
}
运行结果与引用方式一致。
4. 总结
- 创建父类类型变量后,该变量终结时,会被调用析构函数;
- 父类引用或指针指向子类变量,终结时不会被调用析构函数;