#include <iostream>
#include <cmath>
using namespace std;
class Shape
{
public:
Shape() {}
virtual ~Shape() = 0;
virtual double getPerimeter() = 0;
virtual double getArea() = 0;
};
Shape::~Shape() { } //①能不能不写??为什么??
class Triangle: public Shape
{
public:
Triangle() {}
Triangle(double a, double b, double c):a(a),b(b),c(c) {}
//Triangle(const Triangle ©):a(copy.a),b(copy.b),c(copy.c) {}
Triangle& operator=(const Triangle& assign)
{
if (this != &assign)
{
a = assign.a;
b = assign.b;
c = assign.c;
}
return *this;
}
virtual ~Triangle() {}
virtual double getPerimeter()
{
return a+b+c;
}
virtual double getArea()
{
double q = (a+b+c)/2;
return sqrt(q*(q-a)*(q-b)*(q-c));
}
private:
double a;
double b;
double c;
};
class Rectangle:public Shape
{
public:
Rectangle() {}
Rectangle(double h,double w):height(h),width(w) //②调换顺序,如何??
{ }
virtual ~Rectangle() {}
virtual double getPerimeter()
{
return 2 * (width + height);
}
virtual double getArea()
{
return width * height; //③假如Rectangle有一个独有的成员函数,问如何利用动态绑定技术实现??
}
private:
double height;
double width;
};
int main()
{
Shape *shape[2];
shape[1] = new Rectangle(1.0, 2.0);
shape[0] = new Triangle(3.0, 4.0, 5.0);
for (int i = 0; i < 2; ++i)
{
if (typeid(*shape[i]) == typeid(Triangle)) //④typeid用法??
cout << "这是一个三角形" << endl;
else if (typeid(*shape[i]) == typeid(Rectangle))
cout << "这是一个矩形" << endl;
cout << "周长为:" << shape[i]->getPerimeter() << " ";
cout << "面积为:" << shape[i]->getArea() << endl;
}
delete shape[0];
delete shape[1];
return EXIT_SUCCESS;
}
关于C++多态的一个例子
最新推荐文章于 2024-03-29 18:27:47 发布