假设你正在一个包含矩形的应用程序上工作。每一个矩形都可以用它的左上角和右下角表示出来。为了将一个 Rectangle 对象保持在较小状态,你可能决定那些点的定义的域不应该包含在 Rectangle 本身之中,更合适的做法是放在一个由 Rectangle 指向的辅助的结构体中:
class Point { // class for representing points public: Point(int x, int y); ...
void setX(int newVal); void setY(int newVal); ... };
struct RectData { // Point data for a Rectangle Point ulhc; // ulhc = " upper left-hand corner" Point lrhc; // lrhc = " lower right-hand corner" };
class Rectangle { ...
private: std::tr1::shared_ptr pData; // see Item 13 for info on }; // tr1::shared_ptr | 由于 Rectangle 的客户需要有能力操控 Rectangle 的区域,因此类提供了 upperLeft 和 lowerRight 函数。可是,Point 是一个用户定义类型,所以,在典型情况下,以传引用的方式传递用户定义类型比传值的方式更加高效的观点,这些函数返回引向底层 Point 对象的引用:
class Rectangle { public: ... Point& upperLeft() const { return pData->ulhc; } Point& lowerRight() const { return pData->lrhc; } ... }; | |