在C++中创建一个具有引用调用返回值的类函数
Create a class function with call-by-reference return value in C++
对于我的一个cpp程序,我创建了一些类(像往常一样,在私有部分中创建变量,在公共部分中创建用于访问的函数)。但现在我有一个问题,我想通过引用访问这个类中的几个变量,例如,如果我通过getVariable(void)
获得它们,我想直接修改它们。我已经编写了第二个函数setVariable(value)
。但只有当我只想写入变量时,这个函数才可用
如何解决在公共类函数返回的私有变量中读写的问题
我已经读过这些问题:在C++中通过引用传递类成员函数返回值,在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
这可能吗?还是应该重写其他函数?
您需要一个通过引用返回私有成员的函数来修改它,例如:
#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
在上面的例子中,我们使用函数mutableA()
修改成员a
(最初它的值为2,之后它为4)。关键元素是函数中的int &
返回声明,它告诉编译器,该函数将返回引用,这允许我们修改原始的私有变量。
顺便说一句,我想说的是,这不是很常见的行为——当然有理由这样做,但如果你计划在课堂外修改a
,你可能一开始就不希望它是私有的。这显然取决于你的设计,但这是值得考虑的。
您可以返回一个可用于修改的引用:
thing & get_member() {return member;}
您还需要一个const
重载,所以您仍然可以从const
对象中获取它,但不能更改它:
thing const & get_member() const {return member;}
但是,如果你想不受限制地读写它,为什么它首先是私人的?
相关文章:
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 推理类型如何工作"auto"和按引用调用?
- C++ 通过引用调用函数
- 按引用调用与按指针参数调用的差异 前递增和后递增
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 通过引用调用模板专用化
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- 按引用调用还是按值调用?
- 从 JS (V8) 中C++对象的引用调用函数
- 为什么要抛出引用调用复制构造函数的异常?
- 向量 - 通过引用 c++ 调用
- 为什么可以从常量引用调用析构函数
- 使用全局引用调用函数时访问冲突
- 引用调用在 c++ 中如何工作?
- 它不是编译.我正在调用一个通过引用调用的函数,但有一个错误,无法将双*转换为双倍
- C++函数调用 lambda obj,按值调用比按引用调用快
- 如何在 C++14 中编写用于调用 Fortran 函数的通用包装器(按引用调用 --按值调用>)
- 通过引用调用类对象的 2D 数组
- 构造函数参数中的引用调用引用的默认构造函数
- 如何在 main 中使用包含对节点的引用调用函数