在C++中,虚函数返回类型的头文件必须包含在类声明中吗?

fhg3lkii  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(188)

请看下面的代码:

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()函数返回的是对象,而不是指向对象的指针。谢谢。

pcww981p

pcww981p1#

在函数声明中用作返回类型或参数类型的类型(无论是否为virtual)只需要在函数定义(或其调用点)处完成,而不是在其声明处完成。
如果覆盖virtual函数声明的返回类型与其覆盖的函数的返回类型不同,则会出现异常。这种情况可能发生在协变返回类型中,其中覆盖函数返回指向类B的指针/引用,而覆盖函数返回指向从B继承的类D的指针/引用。在这种情况下,协变返回类型中的D必须在声明时已经完成(或者是包含重写函数的类),原因很明显,必须检查返回类型是否真的是协变的。

相关问题