首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

对象的成员变量可不可以被修改

2013-11-29 
对象的成员变量能否被修改有一对象A a, 内有一成员变量m_a, 调用它的函数GetA(){return m_a}现在要将将m_

对象的成员变量能否被修改
有一对象A a, 内有一成员变量m_a, 调用它的函数GetA(){return m_a;}
现在要将将m_a传给一个void*的形参,&a.GetA()  这样传参是否合理,函数内如果改变了实参m_a的值会不会
改变对象的成员变量的值
[解决办法]
这样做得看GetA()的返回值是不是引用
不是引用,这么做不是不合理,而是不合法。

是引用,可以这么做,m_a的值会被改变。但这么做会破坏类的封装。
[解决办法]
GetA返回的是什么? 是引用还是? 如果是m_a的引用那可以取得地址,
而且可以修改值.但一定注意查看文档看这个类允不允许你这样做.

但如果是比如m_a是个int:
int GetA() { return m_a; }
那GetA返回的是右值,&GetA()通不过编译.更别提修改m_a的值了
[解决办法]
显然不合理,GetA()返回的是int常量,取地址是非法操作,建议楼主将返回值改为指针类型。
[解决办法]

引用:
这样做得看GetA()的返回值是不是引用
不是引用,这么做不是不合理,而是不合法。

是引用,可以这么做,m_a的值会被改变。但这么做会破坏类的封装。

++
可以改成这样: 

class A
{
  public:
  int& getA(){return m_a;}
  int getA() const{ return m_a;};
  private:
    int m_a;
};

若A的实例a不是const的, 可以直接void* p = &a.getA();
若a是const的, 则编译会防止&a.getA();


[解决办法]
return m_a;//返回的是m_a的一个副本,你传该地址给指针变量,应该没问题,但是指针变量如果用于修改其值,则不会真正的修改m_a

热点排行