0

私たちの教授はこれについて非常に不明確だったので、私はこれについてあまり曖昧ではないことを願っています。基本的に、他の(非抽象)クラスが継承する抽象基本クラスを作成する必要があります。抽象基本クラスのヘッダーファイルは次のようになります。

//AbstractBase.h 
class AbstractBase
{
    public:
        AbstractBase();
        virtual int operator+ (int)=0;
}

実装.cppファイルは抽象クラスであるため(そのクラスからオブジェクトを作成できないため、ここではおそらく非常に間違っています)、実装.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クラスの2つのオブジェクトを追加する場合、プライベート変数(double Var)を一緒に追加する必要があります。私はいくつかの検索を行いましたが、使用できるものをすぐに見つけることができませんでした(おそらくこの問題に関する知識が限られているためです)。

ちょっとした質問:

  • AbstractBaseクラスで何をしますか?私のタスクの説明では、すべて演算子をオーバーロードしている4つの仮想関数のみを含める必要があると述べています。しかし、これは抽象基本クラスであり、どのようにオーバーロードするかはまだわかりません(つまり、「2つ追加する、方法がわからないが、追加できることはわかっている...」と言っているようなものです。これですべて抽象です。クラスは言う)

編集:私がそれがどのように起こるべきだと思うかについてのいくつかの説明。

抽象基本クラスには、仮想関数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 に答える