在函数中使用const指向类

时间:2013-07-18 09:13:36

标签: c++ const shared-ptr

我在代码中大量使用std :: shared_ptr。我有一些函数需要使用“this”从MyClass中调用,所以将这些函数声明为(例如)

int AnotherClass::foo(const MyClass *obj)
{
} 

我希望const明确表示obj不会因为我传递一个原始指针而改变。 但是在foo里面我有

int AnotherClass::foo(const MyClass *obj)
{
    int number = obj->num_points()-1;
}

我的编译器抱怨“该对象具有与成员函数不兼容的类型限定符”。 num_points是在标题中声明和定义的简单get函数:

class MyClass {
public:
  ...
  int num_points(){return _points.size();}
  ...
private:
  std::vector<MyPoint> _points;
};

最好的方法是什么?显然我可以摆脱foo中的const要求,但我喜欢它强加的刚性。 非常感谢提前!

2 个答案:

答案 0 :(得分:10)

使该成员函数const

int num_points() const // <---
{
    return _points.size();
}

这样你可以在const个对象上调用它。进入habbit就可以获得不会改变对象状态的所有功能。

答案 1 :(得分:6)

也将num_points声明为const:

int num_points() const
{
    return _points.size();
}