如何更改继承类成员的返回类型
How to change the return type of an inherited class member
我最近刚刚学习了模板,我有点好奇。是否可以将继承函数的返回类型更改为模板类型?
例如:
class A{
public:
int getSomething();
};
template<typename T>
class B : public A{
public:
T getSomething();
};
您可以这样做,但B
中的函数将隐藏A
中的函数。当您使用someB.getSomething()
时,将只看到B
中的函数。无论返回类型是否匹配,这都是正确的。
如果您愿意,可以将A::getSomething
纳入范围:
template<typename T>
class B : public A {
public:
using A::getSomething;
T getSomething();
};
然而,当A::getSomething
具有不同的签名时,这种using声明更有用,而在这里,它们都具有相同的参数列表。
若要在此处覆盖getSomething
,必须将其标记为virtual
:
class A {
public:
virtual int getSomething();
};
现在,尝试用int
以外的东西实例化B
无法编译。
仍然有一种情况,您可以更改返回类型,但仍然可以覆盖函数。这是一个协变返回类型,其中派生类返回的东西比基类返回的东西更派生:
class A{
public:
virtual A* getSomething();
};
class B : public A{
public:
B* getSomething() override;
};
相关文章:
- 如何在C++中允许成员函数的自定义返回类型进行类型擦除?
- 在模板化成员函数的返回类型中使用 std::enable_if 时的编译器差异
- 将成员函数的返回类型引用到C++中的自定义类
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 在类定义中推导内联静态成员函数的返回类型
- 如果函数是在类的主体中定义的,我是否需要在成员函数的返回类型中指定 typename?
- 推断成员函数的返回类型
- CRTP:如何推断要用作返回类型的成员类型?
- 返回类型不可知模板类成员功能
- boost::enable_if on 成员函数,重载返回类型
- 如何使用非尾随 decltype 返回类型定义行外类模板成员函数
- 如何在另一个成员函数中修改具有常量返回类型的成员函数的返回值
- 返回类型 char* 的成员函数返回在 while 循环后包含不同字符串的地址
- 我的问题是关于类成员函数作为类指针的返回类型
- enable_if具有类成员功能的返回类型
- 推论成员函数参数 /返回类型
- 推导成员函数包装器的返回类型时出错
- 在C++中使用成员函数向量时,有没有办法实现协变返回类型
- GCC 中的编译器错误,但在将 decltype 与具有尾随返回类型语法的模板化成员函数一起使用时没有 clang
- 为什么编译器需要在已经类限定的成员函数定义的返回类型上使用类限定符