【发布时间】:2020-01-27 09:14:37
【问题描述】:
来自 Java 背景,我无法理解 c++ 的继承功能。我正在尝试根据函数内部的一些逻辑编写一个返回不同子类型的类。代码解释得更好:
超类型.h
class SuperType {
public:
virtual SuperType * functionA() const = 0;
};
SubTypeA.h
class SubTypeA : public SuperType{
public:
SuperType * functionA() const override;
};
子类型A.cpp
SuperType * SubTypeA::functionA() const {
if(someassertionIsTrue()){
return new SubTypeA();
}else{
return new SubTypeB();
}
}
子类型B.h
class SubTypeB : public SuperType{
public:
SuperType * functionA() const override;
};
子类型B.cpp
SuperType * SubTypeB::functionA() const {
if(someassertionIsTrue()){
return new SubTypeA();
}else{
return new SubTypeB();
}
}
return new SubTypeB 行出现错误提示:
Cannot initialize return object of type 'SuperType *' with an rvalue of type 'SubTypeB *'
所以问题:
- 这种类型的逻辑在 c++ 中是否可行?
- 如果是,怎么做?
【问题讨论】:
-
SubTypeA和SubTypeBboth 是否都继承自SuperType?请创建minimal reproducible example 向我们展示。 -
@Someprogrammerdude 是的
-
在一个不相关的注释中,如果
functionA在两个子类中做同样的事情,为什么要在子类中覆盖它?为什么不只在基类中实现呢? -
您的代码(按正确顺序组合在一起)works for me。您是否在两个源文件中都包含
SubTypeA.h和SubTypeB.h头文件?你有任何类的任何前向声明吗?SubtypeA.cpp和SubtypeA.cpp源文件是否出现相同的错误?
标签: c++ inheritance covariant-return-types