疑問を簡略化するため、同じ問題を強調するダミーコードをいくつか書きました。C++:親クラスの演算子関数を使用して子クラスオブジェクトの継承変数を更新する
私は+演算子のオーバーロードを持つBoxという名前のクラスを持っています。次に、Boxクラスから継承するCubeというクラスが宣言されます。私はボックスクラスで定義された+オーバーロードを使用できるようにしたい。どのCubeオブジェクトもBoxオブジェクトであり、継承された変数は継承された関数から構成可能でなければならないので、これは私にとってもっともらしいことです。現在の問題は、+演算子がCubeオブジェクトに変換できないBoxオブジェクトを返すことです。しかし、私はこれがCubeオブジェクトであるという情報を使用することはできません。
コード例:
#include <iostream>
using namespace std;
class Box {
double length, breadth, height;
public:
Box();
Box(double l, double b, double h){
length=l;breadth=b;height=h;
}
double getVolume() {
return length * breadth * height;
}
// Overload + operator to add two Box objects.
Box operator+(const Box& b) {
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
};
class Cube: public Box {
public:
Cube();
Cube(double size):Box(size,size,size){}
Cube operator+(const Cube& b) {
return (Box(*this)+b); // this is wrong
}
};
// Main function for the program
int main() {
Cube C1(5),C2(10),C3;
C3=C1+C2;
cout << "Volume of C3 : " << C3.getVolume() <<endl;
return 0;
}
私はこのトピックに関する多くの答えを読んだことがあります。おそらくこの質問に最も近いのはThisです。しかし、受け入れられた答えは、キューブオブジェクトを後の部分では望ましくないBoxオブジェクトに変換することになります。
編集:この質問は、コミュニティの多くの人々によって不明瞭であることが判明しました。 (申し訳ありませんが、これは私の最初の質問です)。オーバーロードされた機能で何が起こっているのかを確認してください。私はBoxクラスの+演算子の内容をCubeクラスの+演算子にコピーしたくないという考えです。 Boxオブジェクトを返すBoxクラスの+演算子と、継承された変数に対してBox +演算を実行し、Cubeクラスオブジェクトを返すCubeクラスの+演算子が必要です。あなたはボックスを取るキューブのコンストラクタを追加した場合
申し訳ありませんが、私の要件を説明するための良い例を考え出すことができませんでした。私が追加したEDIT appendを読んでください。私はC3をキューブタイプにする必要があります。 –
次に、私の答えをxaxxonのそれに加えなければならないので、ボックス入力を受け取る立方体のコンストラクタを実装してください。また、入力ボックスが有効なキューブであるかどうかをチェックするロジックを実装します。 – JHBonarius
あなたはまだ「最高の答え」として何かをマークしていないので、あなたはまだ苦労している(または機会主義者です)と思いますので、私のために働くいくつかのコードを追加しました。 – JHBonarius