我是一个OOP的新手。最近我读到了关于Liskov替换原则的内容。
在下面的代码中,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?
如果这段代码违反了里氏替换原则,那么是否有人能给我一个不会违反该原则的重载的例子?
我在谷歌上搜索了我的问题,但没有找到任何有用的结果。:(
提前感谢您。
π
作为参数传递是我所说的一个等待发生的意外!(我知道这只是一个例子,但还是...) - AAT