Чтобы упростить мои сомнения, я написал некоторый фиктивный код, который подчеркивает ту же проблему.C++: использование функции оператора родительского класса для обновления унаследованных переменных объекта дочернего класса
Итак, у меня есть класс с именем Box, который имеет перегрузку для оператора +. Затем объявляется класс Cube, который наследуется от класса Box. Я хочу иметь возможность использовать + перегрузку, определенную в классе Box. Это кажется мне правдоподобным, поскольку любой объект Cube также является объектом Box, а унаследованные переменные должны быть конфигурируемы из унаследованных функций. Текущая проблема заключается в том, что оператор + возвращает объект Box, который не может быть преобразован в объект Cube. Но я не могу использовать информацию о том, что * это объект 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, вероятно, самый близкий к этому вопросу. Но принятый ответ преобразит объект Cube в объект Box, что нежелательно в последующих частях.
РЕДАКТИРОВАТЬ: Вопрос был непонятен многим людям сообщества. (Прошу прощения, но это мой первый вопрос о стеке). Пожалуйста, не переходите к тому, что происходит в перегруженной функции. Идея заключается в том, что я не хочу копировать содержимое оператора + в класс Box в оператор + класса Cube. Мне нужен оператор + класса класса Box, возвращающий объект Box, и оператор + в классе Cube, который, помимо прочего, выполняет операцию Box + по унаследованным переменным и возвращает объект класса Cube.
Мне жаль, что я не смог придумать хороший пример, чтобы объяснить мои требования. Пожалуйста, прочитайте добавление EDIT, которое я добавил. Мне нужен C3 для типа куба. –
Затем вы должны добавить свой ответ с помощью xaxxon, поэтому реализуйте конструктор куба, который принимает ввод в ящик. И реализуйте логику, которая проверяет, является ли поле ввода допустимым кубом. – JHBonarius
Как вы все еще не отметили что-либо как «лучший ответ», я думаю, вы либо все еще боретесь (или оппортуниста;)), поэтому я добавил код, который работает для меня. – JHBonarius