C++ラーニング-day 5継承変数の名前、関数の名前、継承権限の問題、継承中の構造と構造、虚関数
7199 ワード
継承中の変数の名前、関数の名前
継承されたアクセス修飾子
継承には、子クラス名の後にコロン、アクセス修飾子、親クラス名を付ける必要があります.異なるアクセス修飾子では、継承後の親クラスのメンバーへのアクセス権が異なります.
ベースクラス(親)
public
protected
private
公有相続
public
protected
非表示(アクセス不可)
保護継承
protected
protected
非表示(アクセス不可)
プライベート継承
private
private
非表示(アクセス不可)
影響を受けるのは派生クラスからアクセスするときの権限(クラス外)です.
継承中の構造と構造関数
サブクラスオブジェクトが作成され、親コンストラクション->子コンストラクション->子コンストラクション->親コンストラクション.親クラスでパラメトリックコンストラクション関数がカスタマイズされている場合、デフォルトのパラメトリックコンストラクション関数はありません.子クラス初期化リストで親クラスのパラメトリックコンストラクション関数を指定する必要があります.組合せの場合も同様に、パラメトリック関数を手動で呼び出して初期化します.
親ポインタが子オブジェクトを指す
できますが、サブクラスのメンバーにはアクセスできません.意味:統合インタフェースの提供、多重性の向上
虚関数は、親ポインタが子オブジェクトに対して子クラスのメンバーにアクセスできないという問題を解決します.
#include
using namespace std;
class CFather
{
public:
int aa;
void Fun1()
{
cout << "father fun1" << endl;
}
void Fun2()
{
cout << "father fun2" << endl;
}
};
class CSon:public CFather
{
public:
int aa;//
void Fun1(int a)
{
cout << "son fun1" << endl;
}
void Fun2()
{
cout << "son fun2" << endl;
}
void GetFatheraa()
{
cout << CFather::aa << endl;// aa
}
protected:
private:
};
int main()
{
CFather f;
CSon s;
f.aa = 10;
s.aa = 10;//
s.CFather::aa = 100;
cout << f.aa << endl;
cout << s.aa << endl;
cout << s.CFather::aa << endl;
//s.Fun1();
s.CFather::Fun1();//
s.Fun1(1);
s.Fun2();//
s.CFather::Fun2();//
return 0;
}
継承されたアクセス修飾子
継承には、子クラス名の後にコロン、アクセス修飾子、親クラス名を付ける必要があります.異なるアクセス修飾子では、継承後の親クラスのメンバーへのアクセス権が異なります.
ベースクラス(親)
public
protected
private
公有相続
public
protected
非表示(アクセス不可)
保護継承
protected
protected
非表示(アクセス不可)
プライベート継承
private
private
非表示(アクセス不可)
影響を受けるのは派生クラスからアクセスするときの権限(クラス外)です.
継承中の構造と構造関数
サブクラスオブジェクトが作成され、親コンストラクション->子コンストラクション->子コンストラクション->親コンストラクション.親クラスでパラメトリックコンストラクション関数がカスタマイズされている場合、デフォルトのパラメトリックコンストラクション関数はありません.子クラス初期化リストで親クラスのパラメトリックコンストラクション関数を指定する必要があります.組合せの場合も同様に、パラメトリック関数を手動で呼び出して初期化します.
親ポインタが子オブジェクトを指す
できますが、サブクラスのメンバーにはアクセスできません.意味:統合インタフェースの提供、多重性の向上
虚関数は、親ポインタが子オブジェクトに対して子クラスのメンバーにアクセスできないという問題を解決します.