Item 31. Covariant Return Types & Item 32. Preventing Copying
Item 31. Covariant Return Types
Covariant:随变,随动。(你变我就变)
通常,一个overriding函数必须与所重写的函数具有相同的返回类型。然而,并非事事如此,Covariant Return Types便是无需如此。如下的继承体系:
class Shape {
public:
//...
virtual Shape *clone() const = 0; // Prototype
//...
};
class Circle : public Shape {
public:
Circle *clone() const; //Covariant Return Types
//...
};
Shape 与 Circle 的clone成员函数的返回类型不同,但却可以正常运行。为何?
Circle 是 Shape 的一个子类,所以Circle*可以自动的转换成为Shape*。这就为Covariant Return Types。
Item 32. Preventing Copying
若不声明copy构造函数,编译器会自动给加上一个。而有时候不想copy构造函数被调用,如何办?
1)声明一个,但是私有的
2)声明一个,但不实现。
这两种方法都是从编译器的角度来控制的,使用了会编译不过。