搜尋

首頁  >  問答  >  主體

c++中访问权限的问题

  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_leeringa_lee2803 天前506

全部回覆(4)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 13:26:42

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:26:42

    你自己都說了、、、

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

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

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:26:42

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:26:42

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

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


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

    回覆
    0
  • 取消回覆