我们的教授对此非常不清楚,所以我希望我对此不要太含糊。基本上我们需要编写一个抽象基类,其他(非抽象)类从该类继承,抽象基类的头文件如下所示:
//AbstractBase.h
class AbstractBase
{
public:
AbstractBase();
virtual int operator+ (int)=0;
}
我不知道在实现 .cpp 文件中放什么,因为它是一个抽象类(所以你不能从那个类创建任何对象,我在这里可能非常非常错误)所以我只是没有做一个。
然后是带有头文件和实现的派生类,如下所示:
//Headerfile for DerivedClass
#include "AbstractBase.h"
class DerivedClass: public AbstractBase
{
public:
DerivedClass(double &);
DerivedClass * operator+ (DerivedClass*);
double getVar();
void setVar(double)
private:
double Var;
}
//Implementation of DerivedClass
#include "DerivedClass.h"
class DerivedClass::DerivedClass(double &Input) :Var(Input)
{}
double DerivedClass::getVar()
{
return Var;
}
void DerivedClass::setVar(double Input)
{
Var=Input;
}
DerivedClass * DerivedClass::operator+ (DerivedClass * object)
{
double Sum;
Sum=Var+object->getVar()
DerivedClass result(Sum);
return result;
}
所以我的问题归结为:
- 重载部分(最后几行)应该执行以下操作:当我添加 DerivedClass 类的两个对象时,它应该只是将私有变量(双 Var)添加在一起。我已经进行了一些搜索,但无法立即找到我可以使用的东西(可能是因为我对这件事的了解有限)。
一个小问题:
- 我该如何处理 AbstractBase 类?我的任务描述指出它应该只包含 4 个虚拟函数,它们都重载了一个运算符。但它是一个抽象基类,我还不知道如何重载它们(就像说“添加两个东西,我不知道怎么做,但我知道你可以把它们加起来......”,这就是所有的抽象班级说)
编辑:关于我认为它应该如何发生的一些澄清。
抽象基类包含一个虚函数operator+。在派生类中,我定义了一个新的 operator+,它知道如何处理派生类对象的添加。如果我使用 DerivedClass* 类型的指针,它将忽略虚函数并使用 DerivedClass 中定义的 operator+ 函数(虚函数的基本原理?)。问题似乎派生类仍然被视为抽象类,所以我不能使用组件 10 提供的代码,因为它实例化了 DerivedClass 的对象(这是不可能的,因为它显然是抽象的)
编辑2:
我们的教授决定省略运算符重载,因为它涉及的代码太复杂:D 无论如何感谢您的帮助,我确实学会了如何正确实现它(有点)。