継承に同じ名前のメンバーが表示されます.

2265 ワード

子と親に同じ名前のメンバーが表示された場合、子オブジェクトから親に同じ名前のデータにアクセスするにはどうすればいいですか? 
1.非静的メンバーの同名
  • サブクラス同名メンバーへの直接アクセス
  • 親の同名メンバーにアクセスするには、ドメイン
  • を追加する必要があります.
    #include
    using namespace std;
    //    
    class Base
    {
    public:
    	Base()
    	{
    		m_A=100;
    	}
    	void func()
    	{
    		cout << "Base-func  " << endl;
    	}
    	void func(int a)
    	{
    		cout << "Base-func(int a)  " << endl;
    	}
    	int m_A;
    };
    
    class Son :public Base
    {
    public:
    	Son()
    	{
    		m_A = 200;
    	}
    	void func()
    	{
    		cout << "Son-func  " << endl;
    	}
    	int m_A;
    };
    
    //          
    void test01()
    {
    	Son s;
    	cout << s.m_A << endl;
    	//        ,          ,      
    	cout << s.Base::m_A << endl;
    }
    
    //        
    void test02()
    {
    	Son s;
    	s.func();  //                 
    	s.Base::func();
    
    	//                 ,                      
    	//                    ,      
    	s.Base::func(100); 
    }
    int main()
    {
    	test01();
    	test02();
    	system("pause");
    	return 0;
    }
    
    

     
    2.静的メンバーの同名
    静的メンバーと非静的メンバーは同じ名前で表示され、処理は一貫しています.
  • サブクラス同名メンバーへの直接アクセス
  • 親の同名メンバーにアクセスするには、ドメイン
  • を追加する必要があります.
    ただし、静的メンバー処理には2つのアクセス方式があります.
  • オブジェクトアクセス
  • クラス名による
  • へのアクセス
    #include
    using namespace std;
    //              
    
    //      :        ,           ,    ,     
    
    class Base
    {
    public:
    	
    	static int m_A;    //                                   
    
    	static void func()
    	{
    		cout << "Base static func" << endl;
    	}
    
    	static void func(int a)
    	{
    		cout << "Base static func(int a)" << endl;
    	}
    };
    int Base::m_A = 100;
    class Son :public Base
    {
    public:
    
    	static int m_A;
    
    	static void func()
    	{
    		cout << "Son static func" << endl;
    	}
    };
    int Son::m_A = 200;
    //          
    void test01()
    {
    	//1.      
    	cout << "      :" << endl;
    	Son s;
    	cout << s.m_A << endl;
    	//        ,          ,      
    	cout << s.Base::m_A << endl;
    
    	//2.      
    	cout << "      :" << endl;
    	cout << Base::m_A<