gpt4 book ai didi

c++ - 在 C++ 中是否可以通过类似属性的语法调用访问器?

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:45 24 4
gpt4 key购买 nike

我正在处理一个大型代码库,其中有许多公开定义的变量。不幸的是,访问这些变量的功能已经改变,这个新功能最好由公共(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com