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を使用してベースクラスポインタを解放すると、動的な析出が実現される.ベースクラスポインタがベースクラスオブジェクトを指す場合、ベースクラスの析出関数のみが呼び出される.ベースクラスポインタがサブクラスオブジェクトを指す場合、サブクラスの構造関数を先に呼び出し、親クラスの構造関数を呼び出すのは前の場合と同じです(この方法は推奨されません).