抽象类继承
Abstract Class Inheritance
不知何故,在定义了AbstractClass之后,我不能让派生类返回派生类的对象。下面的代码有什么问题?
谢谢。代码:
#include <iostream>
using namespace std;
template <typename T>
class AbstractClass {
public:
virtual AbstractClass<T> operator[](int index) = 0;
} ;
template <typename T>
class ClassA : public AbstractClass<T> {
public:
ClassA<T> operator[](int index){
ClassA<T> A;
return A;
}
} ;
template <typename T>
class ClassB : public ClassA<T> {
public:
ClassA<T> operator[](int index){
ClassA<T> A;
return A;
}
} ;
int main(void){
ClassA<int> A;
A[0][1][2];
}
错误:test2.cpp(11): error: return type is neither identical to nor covariant with return type "AbstractClass<int>" of overridden virtual function "AbstractClass<T>::operator[] [with T=int]"
ClassA<T> operator[](int index){
更改为引用会给出返回局部变量的警告:
#include <iostream>
using namespace std;
template <typename T>
class AbstractClass {
public:
virtual AbstractClass<T>& operator[](int index) = 0;
} ;
template <typename T>
class ClassA : public AbstractClass<T> {
public:
ClassA<T>& operator[](int index){
ClassA<T> A;
return A;
}
} ;
template <typename T>
class ClassB : public ClassA<T> {
public:
ClassA<T>& operator[](int index){
ClassA<T> A;
return A;
}
} ;
int main(void){
ClassA<int> A;
A[0][1][2];
}
警告test2.cpp(13): warning #879: returning reference to local variable
return A;
^
detected during instantiation of "ClassA<T> &ClassA<T>::operator[](int) [with T=int]" at line 26
并且,如果通过引用返回,我不知道是否返回一个新对象
有人建议我可以实现一个move构造函数。但是,我发现移动构造函数和模板不能一起工作:使用模板移动操作符
有解决方案吗?
返回AbstractClass<T>
作为实例(不是引用或指针)需要构造该类型的副本。这对于抽象类是不可能的。
要实现多态性,在头部分配一个适当子类的实例,并返回一个指针或像std::shared_ptr
这样与基类类型化的智能指针。
你有两个地方不对:
-
当您返回
Base
作为实例时,对于派生类,您需要构造相同类型的Base
。 -
当你写像
ClassA A
这样的东西时,你不指定模板参数。应该是:ClassA<T> A;
相关文章:
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 抽象类析构函数与继承"Shutdown"函数
- C++的抽象类继承和构造函数的问题
- C++:抽象类继承和构造
- 使用空基类强制继承抽象工厂的做法是不好的吗?
- 私下继承C++抽象基类是什么意思
- 抽象类 A 由类 C 继承"through"类 B "intermediary"。如何声明虚拟功能?
- 如何修复抽象类的迭代继承
- 具有继承类和函数的抽象类写入单独的向量c++
- 继承自C++中的抽象类
- C++抽象类和继承
- C++继承和抽象类
- 从抽象类继承的类的实例
- 在另一个项目中包括继承的类时,抽象类的链接器错误
- 无法使用多重继承 c++ 实例化抽象类
- 有没有办法实现从 c++ 中其他抽象类多重继承的抽象类?
- 如何从 c++ 基类继承抽象行为
- 在从抽象基类继承的类中添加方法
- 多重继承抽象类
- c++元编程:必须继承抽象类的模板参数