我刚刚学习了模板,我有点好奇。是否可以将继承函数的返回类型更改为模板类型?
例如:
false
答案 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;
};