0

我们的教授对此非常不清楚,所以我希望我对此不要太含糊。基本上我们需要编写一个抽象基类,其他(非抽象)类从该类继承,抽象基类的头文件如下所示:

//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 无论如何感谢您的帮助,我确实学会了如何正确实现它(有点)。

4

1 回答 1

0

你的要求有点混乱。假设您的基类是正确的,您将需要一个构造函数,因为您已经声明了一个:

AbstractBase::AbstractBase() {}

你不需要在这里实现 operator+ 。我不确定你对派生的operator+看法,但它可能应该如下所示:

DerivedClass DerivedClass::operator+ (const DerivedClass& rhs)
{
    return DerivedClass(Var + rhs.Var);
}

不过,这不会覆盖您的基础operator+ (int)

这样做的目的是演示虚函数还是运算符重载?不管怎样,我认为你需要你的教授明确他们在寻找什么。

于 2012-04-24T16:00:33.400 回答