我是 OOP 的新手。最近我读到了 Liskov Substitution Principle。
在下面给出的代码中,Square类继承了 Give_Area。假设Square类与 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 替换原则的重载示例吗?
我用谷歌搜索了我的查询,但什么也没找到。:(
提前致谢。