首页  >  问答  >  正文

c++中类中私有成员的调用?

#include <iostream>
using namespace std;
class test{
      private:
            int a;
            int b;
      public:
            test(int a = 1, int b = 2){
                  this->a = a;
                  this->b = b;
            }
            int re(test ccc){
                  a = ccc.a + 444;
                  b = ccc.b + 444;
            }
};

为什么re函数中的ccc可以直接调用a和b而不报错?

天蓬老师天蓬老师2764 天前537

全部回复(8)我来回复

  • 怪我咯

    怪我咯2017-04-17 13:44:40

    搜了下(关键字:c++访问类私有变量),这里有不错的解释:

    http://stackoverflow.com/questions/7396846/with-a-private-modifier-why-can-the-member-in-other-objects-be-accessed-directl

    好问题。要点是 C++ 中的保护是类级别的,而不是对象级别的。因此,在一个对象上调用的方法可以访问同一类的任何其他实例的私有成员。

    如果您看到保护的作用是允许封装以确保类的编写者可以构建内聚的类,并且不必防止外部代码修改对象内容,那么这是有道理的。

    关于真正的“为什么?”的另一个想法。考虑一下您如何编写几乎所有复制构造函数;您想要访问原始的底层数据结构,而不是其呈现的界面。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 13:44:40

    因为 C++ 中一个类是自己这个类的友元(friend class)。

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 13:44:40

    因为 a,b 都是 test 类的成员。

    回复
    0
  • 阿神

    阿神2017-04-17 13:44:40

    一个类的方法可以访问自己的私有成员

    回复
    0
  • 迷茫

    迷茫2017-04-17 13:44:40

    同一类的不同对象间可以互相访问私有成员

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 13:44:40

    一个类里当然可以

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 13:44:40

    私有数据不能被直接访问,只能通过类的成员函数和友元函数调用。

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:44:40

    友元函数 http://learn.jser.com/cplusplus/cpp-friend-functions.html

    回复
    0
  • 取消回复