찾다

 >  Q&A  >  본문

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일 전505

모든 응답(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
  • 취소회신하다