电子商务网站管理系统,网站分哪几类,仿 wordpress,网站诚信备案加qq1126137994 微信#xff1a;liu1126137994 一起学习更多技术#xff01;#xff01;#xff01;
问题一#xff1a;构造函数与析构函数可以成为虚函数么#xff1f;
答案#xff1a; 1、构造函数不可以成为虚函数 因为在构造函数执行结束后#xff0c;虚函数表…加qq1126137994 微信liu1126137994 一起学习更多技术
问题一构造函数与析构函数可以成为虚函数么
答案 1、构造函数不可以成为虚函数 因为在构造函数执行结束后虚函数表指针才被正确的初始化完成
2、析构函数可以成为虚函数 建议在设计类时尤其是存在继承的类时将析构函数设计为虚函数
问题二构造函数与析构函数中会发生多态行为么
答案 1、构造函数中不可能发生多态行为 因为在构造函数执行结束前虚函数表指针没有正确的初始化完成
2、析构函数中不可能发生多态行为 因为在析构函数执行时虚函数表指针已经被销毁
如果构造函数与析构函数中调用了虚函数那么只调用当前类中定义的虚函数版本
看下面的实例程序
#include iostream
#include stringusing namespace std;class Base
{
public:Base(){cout Base() endl;func();//在构造函数中不会发生多态行为虽然func()函数为虚函数//但是编译器不会去动态绑定会直接调用本类中的成员函数}virtual void func() {cout Base::func() endl;}virtual ~Base(){func(); //在析构函数中也不会发生多态行为当编译器发现析构函数中有虚函数时//编译器不会实现动态绑定的行为而是直接调用本类中的成员函数cout ~Base() endl;}
};class Derived : public Base
{
public:Derived(){cout Derived() endl;func();//在构造函数中不会发生多态行为虽然func()函数为虚函数//但是编译器不会去动态绑定会直接调用本类中的成员函数}virtual void func(){cout Derived::func() endl;}~Derived(){func();//在析构函数中也不会发生多态行为当编译器发现析构函数中有虚函数时//编译器不会实现动态绑定的行为而是直接调用本类中的成员函数cout ~Derived() endl;}
};int main()
{Base* p new Derived();// ...delete p;return 0;
}运行结果为 Base() Base::func() Derived() Derived::func() Derived::func() ~Derived() Base::func() ~Base() 由运行结果我们也很容易看出上面相关结论的正确性