c++中访问权限的问题
ringa_lee
ringa_lee 2017-04-17 13:24:42
0
4
503
  1. 描述你的问题
    如下面的这段代码所示,为什么在Base这个类里面,它的拷贝函数,有个Base类的参数,为什么在拷贝函数里面,Base这个类的引用对象tmp,可以直接访问私有数据成员num,不是访问权限标志位private的,就只能被友元和成员函数访问吗?为什么可以直接在拷贝函数里面写tmp.num。这样的语句啊!如果放在main函数里面,声明一个Base类的对象,是不能访问私有数据成员的啊!

  2. 贴上相关代码

    #include <iostream>

    class Base
    {
    private:

       int num;

    public:

       Base(int tmp = 0) : num(tmp) {}
       const Base& operator=(const Base& tmp)
       {
           num = tmp.num;
           return *this;
       } 

    };

    int main()
    {

       return 0;

    }

  3. 贴上报错信息

  4. 贴上相关截图

  5. 已经尝试过哪些方法仍然没解决(附上相关链接)

ringa_lee
ringa_lee

ringa_lee

全部回覆(4)
巴扎黑

自己的成員自己的函數當然可以存取

大家讲道理

你自己都說了、、、

存取權標誌位元private的,就只能被友元和成員函數存取

這個const Base& operator=(const Base& tmp)函數就是Base類別的成員函數啊。 。 。

PHPzhong

類別內的成員自然可以訪問,主要是分清類別和物件。

巴扎黑

個人覺得可以這樣理解:一個類別是自己的友元類別(friend class)。

具體來說,Base類別是自己的友元,而友元是可以存取類別的私有成員的。在Base類別的成員-拷貝賦值運算子裡,tmp物件的型別是Base,而BaseBase的友元,所以可以透過tmp物件存取Base類私有成員num,同理,也可以透過this指標隱式存取Base類別私有成員num


另外,拷貝賦值運算子的回傳值一般不應該是常數引用類型的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板