c ++指向const类成员问题的指针

时间:2010-10-12 11:02:16

标签: c++ pointers pointer-to-member

我遇到了C ++类的问题。我想获得指向myBar对象的指针并将其存储在quxBar中。原因是我希望能够使用quxBar->getX()检查该值,但我还想防止它从Qux中意外地进行修改,因此我尝试使用Bar const*

class Bar
{
private:
    int x;
public:
    void setX(int X) { x = X; };
    int getX(){ return x };
}

class Foo
{
private:
    Bar *myBar;
public: 
    Bar const* getPointerToBar(){ return myBar; };            
}

class Qux
{
    void myMethod();
    Bar const* quxBar;
    Foo *mainFoo;    
}

void Qux::myMethod()
{
    quxBar = mainFoo->getPointerToBar();
    std::cout << quxBar->getX();
    quxBar->setX(100);  // HERE!!!
    std::cout << quxBar->getX(); // returns 100
}

不幸的是,它不起作用,因为我仍然可以执行quxBar->setX(100)而没有编译错误。

可能我的方法完全错了,但使用当前的“技能”:)我不知道如何解决它。

提前感谢您的任何帮助和建议。

1 个答案:

答案 0 :(得分:7)

我认为这不是你的实际代码,首先是因为它有语法错误,其次是因为它实际上是正确的(大多数情况下)。更具体地说,使用这段代码,quxBar->setX(100);会导致编译错误。

但是,quxBar->getX()也是编译错误,你需要告诉编译器可以在const对象上调用,你可以通过在函数签名末尾添加const来实现: / p>

int getX() const { return x; }

也许在您的实际代码中,您有Bar* const quxBar而不是Bar const* quxBar;它们意味着两个不同的东西:前者是Bar的 const指针,而后者是指向 const Bar 的指针。例如。在前面的例子中,只有指针本身不能修改,但它指向的对象可以。