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

标签 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) 而没有编译错误。

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

在此先感谢您的帮助和建议。

最佳答案

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

然而,quxBar->getX()也将是一个编译错误,你需要告诉编译器可以在 const 对象上调用,你通过添加 const 来做到这一点在函数签名的末尾:

int getX() const { return x; }

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

关于c++指向const类成员的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913932/

相关文章:

c++ - 将链表的大小从 '__int64' 截断为 'size_t

c++ - 关闭我的 DISLIN 小部件会导致我的整个程序关闭

c - 根指针移动到指向二叉搜索树中插入的单词

c++ - QT 插槽 : Pointer to Member Function error

c++ - 我可以安全地将指向 const 成员的指针转换为相同类型但非常量吗?

c++ - Golang 从 TCP 端口读取常量数据

c++ - 访问 tuple_t 的类型

c - 指向包含结构的结构的指针

c - 输入第一个元素后出现段错误

c++ - 为什么我必须使用寻址运算符来获取指向成员函数的指针?