请看下面的代码:
class I_Clipboard
{
public:
virtual ~I_Clipboard () = default;
virtual Type_A copied_ta() const = 0;
virtual void set_copied_ta(const Type_A & ta) = 0;
virtual Type_B copied_tb() const = 0;
virtual void set_copied_tb(const Type_B & tb) = 0;
};
Type_A和Type_B的头文件是否必须包含在内,或者向前声明这些类型是否安全?注意,copied_ta()和copied_tb()函数返回的是对象,而不是指向对象的指针。谢谢。
1条答案
按热度按时间pcww981p1#
在函数声明中用作返回类型或参数类型的类型(无论是否为
virtual
)只需要在函数定义(或其调用点)处完成,而不是在其声明处完成。如果覆盖
virtual
函数声明的返回类型与其覆盖的函数的返回类型不同,则会出现异常。这种情况可能发生在协变返回类型中,其中覆盖函数返回指向类B
的指针/引用,而覆盖函数返回指向从B
继承的类D
的指针/引用。在这种情况下,协变返回类型中的D
必须在声明时已经完成(或者是包含重写函数的类),原因很明显,必须检查返回类型是否真的是协变的。