A const member function can be invoked for both const and non-const objects, but a non-const member function can only be invoked for non-const objects.
class Point
{
private:
int x_;
int y_;
public:
Point() : x_{0}, y_{0} {}
Point(int xin, int yin) : x_{xin}, y_{yin} {}
// 'elegant' setters
void x(int xin) { x_ = xin; }
void y(int yin) { y_ = yin; }
// 'elegant' getters
// ### const Member Functions (text excerpted from: Scott Meyers, "Effective C++ (2005)", Itens 3)
// The purpose of 'const' on member functions is to identify which member functions may be invoked on `const objects`
// These functions cannot modify an object (its member data).
// They are important for two reasons:
// 1. It is important to know which functions may modify an object and which may not.
// 2. They make it possible to work with 'const' objects, which is a critical aspect in effective C++ code
// when passing objects by reference-to-const. This technique is viable only if there are `const member functions`
// with which to manipulate the resulting const-qualified objects.
// Rule of Thumb: for any member function that does not modify the object, USE const.
int x() const { return x_; }
int y() const { return y_; }
void print() const
{
cout << "x, y = " << x_ << ", " << y_ << endl;
}
};
void foo(const Point &p)
{
cout << "foo(const Point& p)\n";
cout << "x, y = " << p.x() << ", " << p.y() << endl
<< endl;
}
// These functions cannot modify an object (its member data).
// They are important for two reasons:
// 1. It is important to know which functions may modify an object and which may not.
// 2. They make it possible to work with ‘const’ objects, which is a critical aspect in effective C++ code
因篇幅问题不能全部显示,请点此查看更多更全内容