如何更改继承的类成员的返回类型

时间:2015-11-23 01:14:30

标签: c++ templates

我刚刚学习了模板,我有点好奇。是否可以将继承函数的返回类型更改为模板类型?

例如:

false

1 个答案:

答案 0 :(得分:3)

can do that,但B中的功能会隐藏A中的功能。使用someB.getSomething()时,只会看到B中的函数。无论返回类型是否匹配,都是如此。

如果您愿意,可以将A::getSomething带入范围:

template<typename T>
class B : public A {
public:
    using A::getSomething;
    T getSomething();
};

但是,当A::getSomething具有不同的签名时,此使用声明会更有用,与此处不同,它们都具有相同的参数列表。

要在此处覆盖 getSomething,必须将其标记为virtual

class A {
public:
    virtual int getSomething();
};

现在,尝试使用B fails to compile之外的其他内容来实例化int

仍有one case您可以更改返回类型并仍然覆盖该功能。这是一个协变返回类型,其中派生类返回的内容比基类返回的更多:

class A{
public:
    virtual A* getSomething();
};

class B : public A{
public:
    B* getSomething() override; 
};