搜尋

首頁  >  問答  >  主體

c++中的访问权限的问题

  1. 描述你的问题
    为什么下面的这段代码里面,类的拷贝函数中的参数,是Base类的一个引用,Base类声明有一个私有的数据成员num,为什么拷贝函数中,x可以直接访问x的私有数据成员num。如果在main函数里面声明一个Base 类的对象,如Base test; 不可能直接test.num调用这个数据成员啊?为什么在类里面却又可以啊?

  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. 已经尝试过哪些方法仍然没解决(附上相关链接)

PHPzPHPz2803 天前557

全部回覆(2)我來回復

  • 巴扎黑

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

    你可以認為這個是約定好的特例:拷貝建構函數屬於這個類別的成員函數,能存取參數物件的私有成員也可以理解。

    從語言設計上來說,怎麼設計都可以。但是如果設計成不能訪問,那就必須把內部成員暴露出來(成員public或提供get函數),這不是個好的選擇。

    回覆
    0
  • 巴扎黑

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

    因為存取權限是在類別層次上的,而不是物件層次上的

    拷貝函數的呼叫物件和拷貝函數參數的物件仍然可以存取它們之間的private函數

    回覆
    0
  • 取消回覆