【发布时间】:2026-01-19 10:05:01
【问题描述】:
我来自 Actionscript 3 等语言的背景,我们有一种特殊的方式将成员变量定义为实例和设置/获取受保护或私有成员值的方法。举个例子吧:
在一个类中,我们可以这样说:
private var _myString:String;
public get myString():String
{
return _myString;
}
public set myString(newValue:String):void
{
//Do some super secret member protection n' stuff
_myString = newValue;
}
然后在该对象之外,我可以执行以下操作:
trace(myClass.myString); //Output whatever _myString is. (note the lack of (). It's being accessed like property not a method...
更进一步,我可以做一些事情,比如删除“public set myString”方法,所以如果有人试图对我的班级这样做:
myClass.myString = "Something"; //Try to assign - again note the lack of ()
它会抛出一个错误,让用户知道该属性是只读的。
现在,由于我使用的是 C++,而且它比 Actionscript 3 更棒,我想知道如何模仿这种行为。我不想使用一堆肮脏的getVariable() 和setVariable() 方法。我希望通过一些运算符重载技巧,我可以在这里实现完全相同的事情。注意我是菜鸟,所以请这样称呼我。 :)
更新 我想解释这一点的最简单方法是,我试图本质上拥有 getter 和 setter,但通过赋值而不是括号 () 来调用它们。
【问题讨论】:
-
在 C++ 中,variable() 和 setVariable() 调用是不脏的。根据您的数据类型和内部类数据,它们实际上比原始公共变量更安全。
标签: c++ getter-setter reflection