final,遗失的子类析构函数

这里写目录标题

  • final
      • 遗失的子类析构函数

final

用来修饰类,让该类不能被继承
理解:使得该类终结!

class XiaoMi {
     
public:
	XiaoMi(){
     }
};

class XiaoMi2 final : public XiaoMi  {
     
	XiaoMi2(){
     }
};

class XiaoMi3 : public XiaoMi2 {
       //不能把XiaoMi2作为基类

};

用来修饰类的虚函数,使得该虚函数在子类中,不能被重写
理解:使得该功能终结!

class XiaoMi {
     
public:
	virtual void func() final;
};

void XiaoMi::func() {
      //不需要再写final
	cout << "XiaoMi::func" << endl; 
}

class XiaoMi2 : public XiaoMi  {
     
public:
	void func() {
     }; // 错误!不能重写func函数
};

遗失的子类析构函数

【注意】
为了防止内存泄露,最好是在基类析构函数上添加virtual关键字,使基类析构函数为虚函数
目的在于,当使用delete释放基类指针时,会实现动态的析构:
如果基类指针指向的是基类对象,那么只调用基类的析构函数
如果基类指针指向的是子类对象,那么先调用子类的析构函数,再调用父类的析构函数
等效于上一种情况(该方式不推荐)

你可能感兴趣的:(C++,笔记,指针,抽象类,设计模式,编程语言,面向对象编程)