-
メンバーの権限を継承する
親クラスのメンバ変数とメンバ関数の権限の種類には、public、protected、private があり、
継承にも public、protected、private の 3 種類があります。親クラスの権限\継承メソッド 公共 保護された プライベート 公共 公共 保護された プライベート 保護された 保護された 保護された プライベート プライベート アクセスできない アクセスできない アクセスできない 親クラスのプライベート メンバーは確かにサブクラスから継承されていますが、サブクラスのメンバーにはアクセスできないことがわかります。継承後の親クラスのパブリック メンバーと保護されたメンバーのアクセス許可は、アクセス許可の厳密なバージョンです。および親クラスの継承メソッド。したがって、親クラスのプライベートメンバやサブクラスのメンバ関数にはアクセスできません。継承した場合でも、自身で新規追加した場合でも、親クラスのプライベートメンバにはアクセスできません。非プライベートメンバ関数を呼び出す
ことによってのみアクセスできます。メンバ関数内の親クラスの(プライベートメンバにはアクセスできないため) 親クラスのプライベートメンバへの間接アクセスclass A { public: A(int a_, int b_):a(a_),b(b_){ } int geta() { return a; } private: int a; int b; }; class B:protected A { public: B(int a_,int b_,int c_):A(a_,b_), c(c_){ } int getaa() { return geta(); } private: int c; }; int main() { B MY{ 1,2,3}; cout<<MY.getaa()<<endl; //可以,用父类的成员函数间接访问 cout<<MY.geta()<<endl; //报错,无法访问 return 0; }
-
コンストラクター
クラスにはコンストラクターとデストラクターが必要ですが、それを作成しない場合は、コンパイラーがデフォルトのコンストラクターとデストラクターを自動的に生成します。コンストラクターを作成する限り、コンパイラーはパラメーターのないデフォルトのコンストラクターを生成しません。そのため、デフォルトのコンストラクターも作成することをお勧めします (複数のコンストラクターはオーバーロードされます)。サブクラス オブジェクトをインスタンス化する場合、サブクラスのコンストラクターは親クラスのコンストラクターも呼び出す必要があります。コンストラクターはサブクラスに継承されないため、初期化リスト内でのみ呼び出すことができます。したがって、初期化リストで呼び出す親クラスのコンストラクターを指定するのが最善です。指定されていない場合でも、親クラスのデフォルトのコンストラクターが呼び出されます。このとき、親クラスにコンストラクターがあることを確認する必要があります。そうでない場合は、エラーが報告されます。
コンストラクターが呼び出される順序は、最初に親クラスのコンストラクター、次にサブクラスのコンストラクターです。 -
デストラクターはいつ
デストラクターを作成する必要がありますか? コンストラクターで動的メモリを新規作成するときは、デストラクターの delete を記述してメモリを解放する必要があります。そうしないと、メモリ リークが発生します。
継承におけるデストラクターの呼び出し順序はコンストラクターとは逆で、最初にサブクラスのデストラクターを呼び出し、次に親クラスのデストラクターを呼び出します。このとき、各クラスにはデストラクターが 1 つだけあるため、親クラスのどのデストラクターを指定する必要はありません。
C++ 継承におけるメンバーの権限、コンストラクター、およびデストラクター
おすすめ
転載: blog.csdn.net/qq_41253960/article/details/124347463
おすすめ
ランキング