我来自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++,语法糖不存在,这意味着你必须自己实现get/set方法.因此,在您的情况下,您将不得不实现一个getVariable()方法,而不是它的等效Set方法,以使其只读.
并且请不要诉诸宏来制作它看起来你有一些只读属性.5年后,当他们阅读你的代码时,这只会让人失望.