Наследование бинарной перегрузки? Здравствуйте, мне нужно привести родительский класс к дочернему , чтобы использовать перегруженный оператор дочернего класса. Сам перегруженный оператор задается как дружественныя функция, так как принимает два значения .
pointClass[0] - указатель который инициализирован как бызовый классvoid SplitString(int choice)
{
char string[100];
system("clear");
cout << "Введите значение второго операнда" <> string;
Str_Indef strIndef(string);
strIndef = strIndef + (Str_Indef)*pointClass[0]; // Так я привожу и не работает
strIndef.Print();
Pause();
}
Код перегрузки.const Str_Indef operator +(const Str_Indef& right, const Str_Indef& left)
{
std::cout << "ПЕРЕГРУЗКА ОПЕРАЦИИ + [Строка-Идетификатор]" <

21 Авг 2019 в 07:07
229 +1
0
Ответы
1

Чтобы достичь цели наследования бинарной перегрузки оператора в дочернем классе, вам следует определить этот оператор в базовом классе как виртуальную функцию. В дочернем классе вы перегрузите эту функцию с помощью оператора +. Вот пример вашего кода с учётом этих изменений:

class Str_Indef {
protected:
char* p_char;
int size;
public:
virtual Str_Indef operator+(const Str_Indef& right) {
std::cout << "ПЕРЕГРУЗКА ОПЕРАЦИИ + [Строка-Идентификатор]" << std::endl;
char *pointerChar = new char[size + right.size-1];
strcpy(pointerChar, p_char);
strcat(pointerChar, right.p_char);
Str_Indef returnString;
returnString.p_char = pointerChar;
returnString.size = strlen(pointerChar);
return returnString;
}
// другие методы и конструкторы класса
};
// Дочерний класс, наследующийся от Str_Indef
class MyStrIndef : public Str_Indef {
public:
MyStrIndef operator+(const MyStrIndef& right) {
std::cout << "ПЕРЕГРУЗКА ОПЕРАЦИИ + [Мой Строка-Идентификатор]" << std::endl;
char *pointerChar = new char[size + right.size-1];
strcpy(pointerChar, p_char);
strcat(pointerChar, right.p_char);
MyStrIndef returnString;
returnString.p_char = pointerChar;
returnString.size = strlen(pointerChar);
return returnString;
}
// другие методы и конструкторы класса
};
void SplitString(int choice) {
char string[100];
system("clear");
cout << "Введите значение второго операнда" << endl;
cin >> string;
Str_Indef strIndef(string);
MyStrIndef myStrIndef(string);
Str_Indef result1 = strIndef + (Str_Indef)*pointClass[0];
MyStrIndef result2 = myStrIndef + (MyStrIndef)*pointClass[0];
result1.Print();
result2.Print();
Pause();
}

Теперь ваш дочерний класс MyStrIndef перегружает оператор +, наследованный от родительского класса Str_Indef. Когда вы вызываете + для объектов MyStrIndef, будет использоваться перегрузка этого оператора из дочернего класса.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир