私はOOPの初心者です。最近、リスコフの置換原理について読みました。
以下のコードでは、SquareクラスがGive_Areaを継承しています。Squareクラスに正方形に関連する何かがあるとします (有効性チェックなど)。Give_Areaは、正方形の面積 (4 つの頂点が円の周囲にある) と円の面積を与えます。したがって、Radiusが与えられた場合、円と正方形の領域を印刷する必要があります (その円の周囲に配置された頂点で構成されます)。円の面積を取得するために、パラメーターを使用しました。ただし、正方形の面積を取得する際のパラメーターはありません。したがって、ここでオーバーロードを行いました。
#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?
このコードが違反している場合、Liskov Substitution Principle に違反しないオーバーロードの例を教えてください。
クエリをグーグル検索しましたが、何も見つかりませんでした。:(
前もって感謝します。