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)声明一个,但不实现。

这两种方法都是从编译器的角度来控制的,使用了会编译不过。

原文地址:https://www.cnblogs.com/aiwz/p/6333220.html