我正在处理一个大型代码库,其中有许多公开定义的变量。不幸的是,访问这些变量的功能已经改变,这个新功能最好由公共(public)访问器和私有(private)实例变量封装。
所以,我正在尝试进行此更改。为此,我计划将每个公共(public)属性设为私有(private),然后创建访问器。但是,我不想更改任何访问旧公共(public)属性的代码。例如:
将公共(public)属性更改为私有(private)后,我有以下类:
class Test {
private:
int item = 5;
public:
int GetItem() {
return item;
};
void SetItem(int new_item) {
item = new_item;
};
};
以前,“item”曾经是类的公共(public)属性,通过以下方式访问:
Test* t = new Test();
int item = t->item;
不过现在,我需要为“项目”的检索方式添加新功能。例如:
int GetItem() {
// Some complicated code which changes "item"
return item;
};
如何保持相同的语法:
int item = t->item;
但实际执行:
int item = t->GetItem();
非常感谢任何帮助!
最佳答案
你可以使 int item = t.item;
工作,方法是将 item
定义为一个成员变量,其类型是一个带有自定义转换 operator 的辅助类int()
定义。另外,operator=(int new_value)
拦截集合操作。
你做不到的是
int& item = t.item;
或
int* pitem = &t.item;
因为这两者都支持直接内存访问,无需通过任何 getter 或 setter。在创建引用或指针时,您甚至无法确定会有多少次访问或读取或写入。
关于c++ - 在 C++ 中是否可以通过类似属性的语法调用访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36798867/