【问题标题】:why private value of the obj can be changed by class instance?为什么类实例可以更改 obj 的私有值?
【发布时间】:2012-09-16 14:38:55
【问题描述】:
#include<iostream>
using namespace std;

class A
{
    private:
        int value;
    public:
        A(int init):value(init){}
        void changevalue(A &a){a.value = 100;}//why a's value can be changed?
        void printvalue(){cout << value << endl;}
};

int main(int argc , char *argv[])
{
    A a(2);
    A b(3);

    a.changevalue(b);
    b.printvalue();

    return 0;
}

aA类的一个实例,有一个名为value的私有值,但是为什么这个私有值可以改变呢?那是包含在类范围内的参数列表吗?

【问题讨论】:

  • 您在课堂上提供了该接口。如果您不希望一个对象更改另一个对象,则不提供接口将解决您的问题。但是,类本身是可以访问私有内容的,而不是实例。

标签: c++


【解决方案1】:

因为类访问说明符适用于每个类而不是每个对象。

你总是可以在类函数中修改相同类型的对象。通常的例子是复制构造函数和复制赋值操作符。

【讨论】:

    【解决方案2】:

    private 并不意味着“对象身份私有”,而是“类型(和朋友)私有”。

    请注意,可访问性和能够写入类型是正交概念。您始终可以访问您自己类型的对象内部的私有值,但您是否可以写入它取决于该对象是否声明为const

    void f(A& a){ a.value = 4; } // OK: 'a' is not 'const'
    void g(A const& a){ a.value = 4 } // error: 'a' is marked as ' const'
    

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 2012-02-16
      • 2011-02-06
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 2011-10-22
      • 2018-12-02
      相关资源
      最近更新 更多