#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <cmath>
#define PI M_PI
class Graph
{
public:
Graph()
{
}
virtual ~Graph()
{}
virtual double get_area() = 0;
virtual double get_perimeter() = 0;
virtual void show() = 0;
protected:
double area = 0;
double perimeter = 0;
};
class Rectangle:public virtual Graph
{
public:
Rectangle()
{
len = 0;
high = 0;
}
Rectangle(double len, double high)
:len(len), high(high)
{
area = len * high;
perimeter = (len + high) * 2;
}
Rectangle(const Rectangle &other):
len(other.len), high(other.high)
{
area = other.area;
perimeter = other.perimeter;
}
~Rectangle()
{}
inline double get_area() override
{
return area;
}
inline double get_perimeter() override
{
return perimeter;
}
void show()
{
std::cout << "图形为矩形" << std::endl;
std::cout << "length = " << len << std::endl;
std::cout << "high = " << high << std::endl;
std::cout << "area = " << area << std::endl;
std::cout << "perimeter = " << perimeter << std::endl;
}
private:
double len;
double high;
};
class Round:public virtual Graph
{
public:
Round()
{
radius = 0;
}
Round(double radius)
:radius(radius)
{
area = PI * radius * radius;
perimeter = 2 * PI * radius;
}
Round(const Round &other):
radius(other.radius)
{
area = other.area;
perimeter = other.perimeter;
}
~Round()
{}
inline double get_area() override
{
return area;
}
inline double get_perimeter() override
{
return perimeter;
}
void show()
{
std::cout << "图形为圆形" << std::endl;
std::cout << "radius = " << radius << std::endl;
std::cout << "area = " << area << std::endl;
std::cout << "perimeter = " << perimeter << std::endl;
}
private:
double radius;
};
class Triangle:public virtual Graph
{
public:
Triangle()
{
len1 = 0;
len2 = 0;
len3 = 0;
}
Triangle(double len1, double len2, double len3)
:len1(len1), len2(len2), len3(len3)
{
if((len1 + len2) < len3 || (len1 - len2) >len3 || (len2 - len1) >len3)
{
std::cout << "该三条边不能组成一个三角形" << std::endl;
Triangle();
}
else
{
perimeter = len1 + len2 + len3;
double p = perimeter / 2;
area = sqrt(p * (p - len1) * (p - len2) * (p - len3));
}
}
Triangle(const Triangle &other):
len1(other.len1), len2(other.len2), len3(other.len3)
{
area = other.area;
perimeter = other.perimeter;
}
Triangle &operator()(double len1, double len2, double len3)
{
if((len1 + len2) <= len3 || (len1 - len2) >= len3 || (len2 - len1) >= len3)
{
std::cout << "该三条边不能组成一个三角形" << std::endl;
return *this;
}
else
{
this->len1 = len1;
this->len2 = len2;
this->len3 = len3;
perimeter = len1 + len2 + len3;
double p = perimeter / 2;
area = sqrt(p * (p - len1) * (p - len2) * (p - len3));
}
}
~Triangle()
{}
inline double get_area() override
{
return area;
}
inline double get_perimeter() override
{
return perimeter;
}
void show()
{
std::cout << "图形为三角形" << std::endl;
std::cout << "三边长分别为: = " << "\n"
<< len1 << "\t" << len2 << "\t" <<len3 << std::endl;
std::cout << "area = " << area << std::endl;
std::cout << "perimeter = " << perimeter << std::endl;
}
private:
double len1;
double len2;
double len3;
};
void show1(Graph &graph)
{
graph.show();
}
void show2(Graph &graph)
{
std::cout << "周长为:" << graph.get_perimeter() << std::endl;
std::cout << "面积为:" << graph.get_area() << std::endl;
}
int main()
{
Triangle t(1,2,3);
t(3,4,5);
Rectangle rec(10,5);
Round ric(4);
show1(t);
show1(rec);
show2(ric);
}
C++虚继承练习
最新推荐文章于 2024-10-08 00:02:21 发布