Я новичок в ООП. Недавно я прочитал о принципе подстановки Лискова.
В приведенном ниже коде класс Square наследует Give_Area. Предположим, что класс Square выполняет какие-то действия, связанные с квадратом (например, проверку действительности). Give_Area дает площадь квадрата (4 вершины по периметру круга) и площадь круга. Итак, если мне задан Радиус, я должен распечатать область круга и квадрата (состоит из вершин, расположенных по периметру этого круга). Чтобы получить площадь круга, я использовал параметр. Но нет параметра при получении площади квадрата. Таким образом, я сделал здесь перегрузку.
#include<iostream>
#include<cmath>
using namespace std;
class Give_Area
{
public:
double Radius;
double Area(double pi)
{
return pi*Radius*Radius;
}
double Area()
{
double temp = sqrt(2.0)*Radius;
return temp*temp;
}
};
class Square : public Give_Area
{
public:
bool Validity()
{
//checking validity
}
};
int main()
{
Give_Area* area = new Square();
area->Radius = 3.0;
cout<< "Area of Circle: " << area->Area(3.14159) <<endl;
cout<< "Area of Square: " << area->Area() <<endl;
return 0;
}
У меня вопрос ..
Is this overloading violating Liskov Substitution Principle?
Если этот код нарушает, то не мог бы кто-нибудь дать мне пример перегрузки, которая не нарушит принцип подстановки Лискова?
Я погуглил свой запрос, но ничего не нашел. :(
Заранее спасибо.
Area()
, я должен иметь возможность суммировать общую площадь всех фигур, независимо от того, какие они формы, вызывая Area ( ) на каждой фигуре по очереди и добавляю ее к моей сумме. - person Matt Coubrough   schedule 17.12.2014π
в качестве параметра - это то, что я называю несчастным случаем, ожидающим своего часа! (Я уверен, что это всего лишь пример, но все же ...) - person AAT   schedule 17.12.2014