0

我认为 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 进行访问?

4

2 回答 2

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 中编译。

于 2013-06-03T22:27:05.203 回答
0

根据文档,对“虚拟成员”的访问被转换为对访问器函数的调用。

这表明调用者需要访问访问器函数。尝试将它们公开?

于 2013-06-03T22:26:27.227 回答