final,失われたサブクラス構造関数
ここに目次の見出しを書きます final 失われたサブクラス構造関数
final
クラスを修飾して、クラスが継承されて理解されないようにします:クラスを終了させます!
クラスを修飾するために使用される虚関数は、この虚関数がサブクラスにあるように、理解を書き換えることができません:この機能を終了させます!
欠落したサブクラス構造関数
【注意】メモリ漏洩を防止するためには、ベースクラス析出関数にvirtualキーワードを追加し、ベースクラス析出関数を虚関数にすることが望ましい.deleteを使用してベースクラスポインタを解放すると、動的な析出が実現される.ベースクラスポインタがベースクラスオブジェクトを指す場合、ベースクラスの析出関数のみが呼び出される.ベースクラスポインタがサブクラスオブジェクトを指す場合、サブクラスの構造関数を先に呼び出し、親クラスの構造関数を呼び出すのは前の場合と同じです(この方法は推奨されません).
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を使用してベースクラスポインタを解放すると、動的な析出が実現される.ベースクラスポインタがベースクラスオブジェクトを指す場合、ベースクラスの析出関数のみが呼び出される.ベースクラスポインタがサブクラスオブジェクトを指す場合、サブクラスの構造関数を先に呼び出し、親クラスの構造関数を呼び出すのは前の場合と同じです(この方法は推奨されません).