不清楚如何在从抽象基类派生的类中实现运算符重载

时间:2012-04-24 15:45:27

标签: c++ operator-overloading abstract-class

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

//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类的两个对象,它应该只添加私有 变量(double Var)在一起。我做了一些搜索但是 无法立即找到我可以使用的东西(也许是因为 我对此事的知识有限。)。

一个小问题:

  • 我如何处理AbstractBase类?我的任务描述说明 它应该只包含4个虚拟函数 超载运营商。但它是一个抽象的基类,我没有 知道我怎么会超载他们(即它就像说“加两个 事情,我不知道怎么样,但我知道你可以添加它们......“,就是这样 所有抽象类都说)

编辑:对我认为应该如何发生的一些澄清。

抽象基类包含虚函数运算符+。在派生类中,我定义了一个新的operator +,它知道如何处理派生类的对象的添加。如果我使用DerivedClass *类型的指针,它将忽略虚函数并转到DerivedClass中定义的operator +函数(虚函数的基本原理?)。问题似乎是派生类仍然被视为抽象类,所以我不能使用组件10提供的代码,因为它实例化了DerivedClass的对象(这是不可能的,因为它显然是抽象的)

编辑2:

我们的教授决定忽略运算符重载,因为它涉及太复杂的代码:D无论如何,感谢您的帮助,我确实学会了如何正确实现它(有点)。

1 个答案:

答案 0 :(得分:0)

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

AbstractBase::AbstractBase() {}

您无需在此处实施运算符+。我不确定您使用派生的operator+得到了什么,但它应该看起来如下:

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

但这不会覆盖你的基地operator+ (int)

此目的是为了演示虚函数还是运算符重载?无论哪种方式,我认为你需要从教授那里明确一下他们正在寻找什么。