46_父類和子類的同名 成員變量 處理

1、當 父類和子類 成員變量同名時 在子類就近原則 選擇本作用域的子類成員

2、如果在子類中 必須使用父類中的同名成員 必須加上父類的作用域。

class Base
{
    //父類的私有數據 一旦涉及繼承 在子類中不可見
public:
    int num;
public:
    Base(int num)
    {
        this->num = num;
        cout<<"Base有參構造int"<<endl;
    }
    ~Base()
    {
        cout<<"析構函數"<<endl;
    }
};

class Son:public Base
{
private:
    int num;
public:
    Son(int num1,int num2):Base(num1)
    {
        this->num = num2;
        cout<<"有參構造int int"<<endl;
    }

    ~Son()
    {
        cout<<"析構函數"<<endl;
    }
    void showNum(void)
    {
        //如果在子類中 必須使用父類中的同名成員  必須加上父類的作用域
        cout<<"父類中的num = "<<Base::num<<endl;

        //當 父類和子類 成員變量同名時  在子類就近原則 選擇本作用域的子類成員
        cout<<"子類中的num = "<<num<<endl;
    }
};

void test01()
{
    Son ob1(10,20);
    ob1.showNum();
}

運行結果:

3、子類可以藉助 父類的公有方法 間接的操作 父類的私有數據(不可見的數據)

class Base
{

private:
    int num;//父類的私有數據 一旦涉及繼承 在子類中不可見
public:
    Base(int num)
    {
        this->num = num;
        cout<<"Base有參構造int"<<endl;
    }
    ~Base()
    {
        cout<<"析構函數"<<endl;
    }
    int getNum(void)
    {
        return num;
    }
};

class Son:public Base
{
private:
    int num;
public:
    Son(int num1,int num2):Base(num1)
    {
        this->num = num2;
        cout<<"有參構造int int"<<endl;
    }

    ~Son()
    {
        cout<<"析構函數"<<endl;
    }
    void showNum(void)
    {
        //如果在子類中 必須使用父類中的同名成員  必須加上父類的作用域
        cout<<"父類中的num = "<<getNum()<<endl;

        //當 父類和子類 成員變量同名時  在子類就近原則 選擇本作用域的子類成員
        cout<<"子類中的num = "<<num<<endl;
    }
};

void test01()
{
    Son ob1(10,20);
    ob1.showNum();
}

運行結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章