我认为c ++中的属性可以用于使用方法设置变量,同时仍然保持用于访问的点表示法。我错了吗?
class Class {
private:
int _number;
void putNumber(int number) {
if (number < 10) _number = 0;
else _number = number;
}
int getNumber() {
return _number;
}
public:
__declspec(property(get = getNumber,put = putNumber)) int number;
};
main()
{
Class classObj;
classObj.number = 2;
std::cout << classObj.number;
}
源代码输出不应该是0吗?它输出2虽然..
我怎样才能达到我想要的效果?保持点符号但通过setter和getter进行访问?
答案 0 :(得分:1)
虽然每个人都是正确的,但它不是标准的,如果您正在使用Visual Studio进行编译,并且您不关心在任何其他操作系统上运行,请继续。如果你正在编译VS,你应该有这个错误:
Error 1 error C2248: 'Class::putNumber' : cannot access private member declared in class 'Class'
您的getter / setter方法是私有的,因此无法访问,因此您需要修改代码:
class Class {
private:
int _number;
public:
void putNumber(int number) {
if (number < 10) _number = 0;
else _number = number;
}
int getNumber() {
return _number;
}
__declspec(property(get = getNumber,put = putNumber)) int number;
};
虽然判断您没有编译错误,但我怀疑您没有在Visual Studio中编译。
答案 1 :(得分:0)
根据the documentation,对“虚拟成员”的访问将转换为对访问者功能的调用。
这表明调用者需要访问访问者功能。试着把它们公开吗?