c++中这些作法是不正确或者应该极力避免的
- 构造函数声明为虚函数:所谓虚函数就是多态状况下只执行一个,而从继承的概念来说,老是要先构造父类对象,而后才能是子类对象,若是构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造,还有一个缘由就是为了防错,试想若是你在子类中一不当心重写了个跟父类构造函数同样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错
- 构造函数中调用虚函数:在构造函数不要调用虚函数。在基类构造的时候,虚函数是非虚,不会走到派生类中,既是采用的静态绑定。显然的是:当咱们构造一个子类的对象时,先调用基类的构造函数,构造子类中基类部分,子类尚未构造,尚未初始化,若是在基类的构造中调用虚函数,若是能够的话就是调用一个尚未被初始化的对象,那是很危险的,因此C++中是不能够在构造父类对象部分的时候调用子类的虚函数实现。可是不是说你不能够那么写程序,你这么写,编译器也不会报错。只是你若是这么写的话编译器不会给你调用子类的实现,而是仍是调用基类的实现
- 析构函数中调用虚函数:在析构函数中也不要调用虚函数。在析构的时候会首先调用子类的析构函数,析构掉对象中的子类部分,而后在调用基类的析构函数析构基类部分,若是在基类的析构函数里面调用虚函数,会致使其调用已经析构了的子类对象里面的函数,这是很是危险的
欢迎关注本站公众号,获取更多信息