我们的教授对此非常不清楚,所以我希望我对此不要太模糊。基本上我们需要编写一个抽象基类,其他(非抽象)类继承该抽象基类,抽象基类的头文件如下所示:
//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;
}
所以我的问题归结为:
一个小问题:
编辑:对我认为应该如何发生的一些澄清。
抽象基类包含虚函数运算符+。在派生类中,我定义了一个新的operator +,它知道如何处理派生类的对象的添加。如果我使用DerivedClass *类型的指针,它将忽略虚函数并转到DerivedClass中定义的operator +函数(虚函数的基本原理?)。问题似乎是派生类仍然被视为抽象类,所以我不能使用组件10提供的代码,因为它实例化了DerivedClass的对象(这是不可能的,因为它显然是抽象的)
编辑2:
我们的教授决定忽略运算符重载,因为它涉及太复杂的代码:D无论如何,感谢您的帮助,我确实学会了如何正确实现它(有点)。
答案 0 :(得分:0)
您的要求有点令人困惑。假设你的基类是正确的,你需要一个构造函数,因为你已经声明了一个:
AbstractBase::AbstractBase() {}
您无需在此处实施运算符+。我不确定您使用派生的operator+
得到了什么,但它应该看起来如下:
DerivedClass DerivedClass::operator+ (const DerivedClass& rhs)
{
return DerivedClass(Var + rhs.Var);
}
但这不会覆盖你的基地operator+ (int)
。
此目的是为了演示虚函数还是运算符重载?无论哪种方式,我认为你需要从教授那里明确一下他们正在寻找什么。