对于我的一个cpp程序,我创建了一些类(像往常一样,私有部分中的变量,以及公共部分中访问的函数)。但是现在我遇到了问题,我希望通过引用访问这个类中的几个变量,例如:如果我通过getVariable(void)
获取它们,我想直接修改它们。我已经编写了第二个函数setVariable(value)
。但是这个函数只有在我只想写入变量时才可用
如何解决我可以在公共类函数返回的私有变量中读写的问题?
我已经阅读了这些问题:Passing class member function return value by reference in C++和Return a reference by a class function and return a whole object in c++?,但它们不适合我的问题。
示例:
class A
{
private:
int x;
public:
int getX(void);
void setX(int y);
}
int A::getX(void)
{
return A::x;
}
void A::setX(int y)
{
A::x = y;
}
我想称之为
A testA;
testA.setX(2);
testA.getX() = 5; // Ok, seems a bit strange, but some of my other functions require that...
//A::x is now 5
std::cout << testA.getX();//Output is 5
这可能吗?或者我应该改写其他功能吗?
答案 0 :(得分:4)
您需要一个函数通过引用返回私有成员才能修改它,如例:
#include <iostream>
class A
{
private:
int a;
public:
A(): a(2) {}
int & mutableA() { return a;}
void printA() { std::cout << this->a << std::endl; }
};
int main()
{
A instance;
instance.printA();
instance.mutableA() += 2;
instance.printA();
}
如果您运行此程序,输出将为:
2
4
在上面的示例中,我们使用函数a
修改成员mutableA()
(最初它的值为2,之后为4)。关键元素是函数中的int &
返回声明,它告诉编译器,该函数将返回引用,这允许我们修改原始的私有变量。
作为旁注,我会说这不是很常见的习惯 - 当然有理由这样做,但可能是你不希望a
来如果您打算从课外修改,请首先保密。这显然取决于你的设计,但它值得考虑。
答案 1 :(得分:1)
您可以返回可用于修改的引用:
thing & get_member() {return member;}
您还需要const
重载,因此您仍然可以从const
对象获取它,但不能更改它:
thing const & get_member() const {return member;}
但是如果你想能够不受限制地阅读和写作,为什么它首先是私有的呢?