其他类型的" const"?

时间:2014-12-14 22:31:25

标签: c++ oop const

考虑以下代码:

class Bar
{
public:
    int GetValue() const { return aVeryImportantValue; }
    void SetValue(int value) { aVeryImportantValue = value; }

private:
    int aVeryImportantValue;
};

class Foo
{
public:
    Foo(const Bar &bar) : _bar(bar) {}

    void SetBar(const Bar &bar) { _bar = bar; }//my compiler won't like this
    int GetValue() const { return _bar.GetValue(); }

private:
    const Bar &_bar;
};

如果我希望能够通过Foo“检查”不同的Bar对象,还要确保Foo不会实际更改Bar的内容,该怎么办?有可能吗?

3 个答案:

答案 0 :(得分:4)

您可以使用指向常量对象的指针:

const Bar *_bar;

你可以切换一个有针对性的变量,并确保Foo不会改变它的状态。

class Foo
{
public:
    Foo(const Bar *bar) : _bar(bar) {}
    void SetBar(const Bar *other) { _bar = other; }
    int GetValue() const { return _bar->GetValue(); }

private:
    const Bar *_bar;
};

答案 1 :(得分:3)

初始化引用后,无法重新引用它以引用其他对象。相反,你应该使用指针。

class Foo
{
public:
    Foo(const Bar &bar) : _bar(&bar) {}

    void SetBar(const Bar &bar) { _bar = &bar; }
    int GetValue() const { return _bar->GetValue(); }

private:
    const Bar *_bar;
};

答案 2 :(得分:2)

您的代码不会编译,因为_bar是一个引用,只能初始化一次。只是摆脱SetBar函数,因为尝试修改const或引用对象是没有意义的。