抽象类中的纯虚函数,返回类型为基/派生类型

Posted

技术标签:

【中文标题】抽象类中的纯虚函数,返回类型为基/派生类型【英文标题】:Pure virtual function in abstract class with return type of base/derived type 【发布时间】:2014-11-28 00:23:43 【问题描述】:

我希望让基类的每个派生类都实现一个函数(在本例中为后缀运算符),该函数将派生类的类型作为返回类型,如下所示:

class A 
    virtual A operator++(int) =0;


class B : public A 
    B operator++(int);

这会产生return type 'A' is an abstract class 类型的错误。该怎么办?据我了解,后缀必须返回实际类型,而不是类型的引用/指针。

【问题讨论】:

选择指针或引用,不需要完整的类型。 在后缀运算符的情况下,返回类型不能是没有修饰符的类类型吗? 铸造重新打开,我想这是正确的副本:***.com/q/18172858/1938163 【参考方案1】:

如何使用CRTP pattern:

template <typename T>
class A 
    virtual T operator++(int) =0;
;

class B : public A<B> 
    B operator++(int) override
    
        // do something here
        return *this; 
    
;

PS:刚刚看到@Marco A. 发布了一个类似方法的链接。为了完整起见,我会保留我的答案,不要感到任何投票的压力。

【讨论】:

太棒了!这样做有什么缺点吗,比如生成的代码臃肿? @VaradMahashabde 我不知道;由于使用了虚函数,我认为它应该与典型的代码膨胀相同。

以上是关于抽象类中的纯虚函数,返回类型为基/派生类型的主要内容,如果未能解决你的问题,请参考以下文章

C++中重载加减乘除等运算符的纯虚函数中的返回类型怎么定义??运算符中参数怎么写??

C++纯虚函数和抽象类

C++ 纯虚函数和抽象类

C++ 纯虚函数和抽象类

多态和抽象

抽象类