【发布时间】:2017-06-04 21:41:40
【问题描述】:
我有一个抽象类,它有两个派生类。我正在尝试在基类中重载 operator+,因此我可以像这样执行 derivedClass=derivedClass+differentDerivedClass:
class iMatrix{
iMatrix operator+(const iMatrix& obj)
}
class UsualMatrix : public iMatrix
class SparseMatrix : public iMatrix
在main里面,我想做
SparseMatrix a, b;
UsualMatrix c=a+b;
我有复制构造函数和所有可能有用的东西。现在,如果我创建这样的函数
iMatrix operator+(const iMatrix& obj)
编译器(Xcode 中的 LLVM)说“返回类型 'iMatrix' 是一个抽象类”,但理论上其他一切都应该正常工作。我已经阅读了手册和其他 StackOverflow 线程,所以我尝试了这个:
iMatrix& operator+(const iMatrix& obj)
而函数本身会“将 obj 添加到 this”并返回 *this。问题是当我做 c=a+b 时,a 等于 c,但它不应该改变。
a=
1 1
1 1
b=
1 1
1 1
a+b=c;
c=
2 2
2 2
b=
1 1
1 1
a=
2 2
2 2
我该怎么办?加法和乘法必须在基类内部实现,我不知道如何解决这个错误。 任何建议将不胜感激,谢谢。
【问题讨论】:
-
多态性和值语义不能很好地结合在一起。
-
真的需要抽象类型来表示矩阵吗?
-
@juanchopanza 是的,因为教我们抽象类和东西是大学的任务:)
-
好的,所以也许它应该是一个反例。您已经发现这种方法存在一个问题。
标签: c++ polymorphism abstract-class