@kraz12345

Как в программе работает перегрузка?

Здравствуйте,добрые люди
Поправьте если я не прав: перегрузка- преопределение для классов существующие обозначение операций,в результате перегрузки классов можно употреблять значения операции привычные для базовых типов.
Преопределенная функция - функция,значит ее можно перегрузить,то бишь создать несколько функций с одинаковыми именами,но разными параметрами входа.
Это научное обозначение,а понимаю я так- когда мы совершаем операции над классами,компилятор не знает что делать,и мы явно указываем какие операции нужно совершать при вызове оператора.-я правильно понимаю,или нет ?
Объясните пожалуйста как происходит передача значений в перегрузку в данной программе.
Что здесь значит kvad и,если при вызове указать k*kvad - то перегрузка будет вызываться float operator *(float k,kvadrat a)- Верно ?

#include <iostream>

class Kvadrat{
private:
	float storona;
public:
	Kvadrat(float a){
		storona = a;
	}

	float ploshad(){
		float S = storona*storona;
		return S;
	}

	float operator * (float k){
		float S = storona*storona*k*k;
		return S;
	}
};

int main(){
	float a, k;
	printf("Vvedite storonu kvadrata: \n");
	scanf("%f", &a);
	Kvadrat kvad(a);
	printf("Ploshad kvadrata: %f\n", kvad.ploshad());
	printf("Vvedite koef podobia: \n");
	scanf("%f", &k);
	printf("Podobniy kvadrat: %f\n", kvad*k);
	getchar();

	return 0;
}
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
У вас не верно перегружен operator* - он должен возвращать объект или ссылку на объект своего класса (т.е. он должен возвращать Kvadrat&): https://en.cppreference.com/w/cpp/language/operators

Параметры передаются не в перегрузку, а в функцию или метод (перегруженные операторы частный случай метода).

Для бинарных операторов вызывается перегруженная операция для класса, стоящего слева в выражении. Например для kvad * k - вызовется kvad.operator*(k).

Если вы напишете k * kvad, то будет ошибка компиляции, т.к. компилятор не сможет преобразовать kvad во float. Но вы можете этому помочь, перегрузив operator float() для Kvadrat.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы