一些人进一步访问函数的概念分为访问器 accessor,用于从一个对象读状态
信息和 修改器 mutator 用于修改状态信息。 而且,可以用重载函数为访问器
和修改器提供相同函数名,调用函数的方式决定了是读还是修改状态信息
//: C09:Rectangle.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Accessors & mutators
class Rectangle {
int wide, high;
public:
Rectangle(int w = 0, int h = 0)
: wide(w), high(h) {}
int width() const { return wide; } // Read
void width(int w) { wide = w; } // Set
int height() const { return high; } // Read
void height(int h) { high = h; } // Set
};
int main() {
Rectangle r(19, 47);
// Change width & height:
r.height(2 * r.width());
r.width(2 * r.height());
} ///:~
构造函数使用构造函数初始化列表来初始化wide和high值
不能让成员函数名与数据成员名相同,于是我们也许想用下划线作为标识符
的第一字符来区分这些数据成员
无输出
可以选用 get 和 set 来标识访问器和修改器
//: C09:Rectangle2.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Accessors & mutators with "get" and "set"
class Rectangle {
int width, height;
public:
Rectangle(int w = 0, int h = 0)
: width(w), height(h) {}
int getWidth() const { return width; }
void setWidth(int w) { width = w; }
int getHeight() const { return height; }
void setHeight(int h) { height = h; }
};
int main() {
Rectangle r(19, 47);
// Change width & height:
r.setHeight(2 * r.getWidth());
r.setWidth(2 * r.getHeight());
} ///:~
当然,访问器和修改器对于内部变量来说,不必是简单的管道
无输出
有时,访问器和修改器可以执行一些比较复杂的计算
使用标准的C库函数中的时间函数来生成简单的Time类:<