创建三角形类
2015-06-16 20:32
239 查看
#include <iostream>
#include<math.h>
using namespace std;
class Shape {
public:
virtual double getArea() const =0;
virtual void print() const =0;
virtual ~Shape(){}
};
class Circle : public Shape {
public:
Circle( int = 0, int = 0, double = 0.0 );
virtual double getArea() const; // 返回面积
virtual void print() const; // 输出Circle 类对象t
private:
int x,y; // 圆心座标
double radius; // 圆半径
}; // 派生类Circle定义结束
class Rectangle : public Shape {
public:
Rectangle( int = 0, int = 0); // 构造函数
virtual double getArea() const; // 返回面积
void print() const; // 输出Rectangle类对象
protected:
int a,b; // 矩形的长和宽
}; // 派生类
double Shape::getArea() const
{
cout<<"基类的getArea函数,面积是 ";
return 0.0;
} // Shape类getArea函数的定义
void Shape::print() const
{
cout<<"Base class Object"<<endl;
} //Shape类print函数定义
Circle::Circle( int xValue, int yValue, double radiusValue )
{
x=xValue; y=yValue;
radius= radiusValue ;
} // Circle类构造函数
double Circle::getArea() const
{
cout<<"Circle类的getArea函数,面积是 ";
return 3.14159 * radius * radius;
} // Circle类getArea函数定义
void Circle::print() const
{
cout << "center is ";
cout<<"x="<<x<<" y="<<y;
cout << "; radius is " << radius<<endl;
} // Circle类print函数定义
Rectangle::Rectangle( int aValue, int bValue )
{
a=aValue; b=bValue;
} // Rectangle类构造函数
double Rectangle::getArea() const
{
cout<<"Rectangle类的getArea函数,面积是 ";
return a * b;
} // Rectangle类getArea函数定义
void Rectangle::print() const
{
cout << "hight is "<<a;
cout<<"width is"<<b<<endl;
}
class Cube : public Rectangle { //派生类Cube的定义
public:
Cube(int x=0, int y=0, int z=0):Rectangle(x,y),c(z){};
double getArea() const;
void print() const;
private:
int c;
};
double Cube::getArea() const
{return a*b*c;}
void Cube::print() const
{
cout<<"Cube:h="<<c<<",length="<<a
<<",width="<<b<<",Area="<<a*b*c<<endl;
}
class Triangle:public Shape
{
protected:
double side1;
double side2;
double side3;
public:
Triangle(double x,double y,double z):side1(x),side2(y),side3(z){};
double getArea() const;
void print() const;
} ;
double Triangle::getArea() const
{
cout<<"Triangle类的getArea函数,面积是:"<<endl;
double p=0,q=0;
p=((side1+side2+side3)/2);
q=sqrt(p*(p-side1)*(p-side2)*(p-side3));
return q;
}
void Triangle::print() const
{
int p;
p=(side1+side2+side3)/2;
cout<<"Triangle:side1="<<side1<<",side2="<<side2
<<",side3="<<side3<<",p=(side1+side2+side3)/2"<<",Area="<<sqrt(p*(p-side1)*(p-side2)*(p-side3))<<endl;
}
void creat_object(Shape **ptr);
void display_area(Shape *ptr);
void delete_object(Shape *ptr);
int main()
{
Shape *shape_ptr;
creat_object(&shape_ptr);
display_area(shape_ptr);
delete_object(shape_ptr);
return 0;
}
void creat_object(Shape **ptr)
{ char type;
*ptr = NULL; //空指针
do{
cout<<"创建对象 请选择:";
cout<<endl;
cout<<"c:Circle类对象;r:Rectangle类对象;u:Cube类对象:t:Triangle类对象:"<<endl;
cin>>type;
switch (type)
{case 'c': //创建Ciecle类对象
{int xx,yy;
double rr;
cout<<"请输入圆心的坐标和圆的半径:";
cin>>xx>>yy>>rr;
*ptr = new Circle(xx,yy,rr);
break;
}
case 'r': //创建Rectangle类对象
{int aa,bb;
cout<<"请输入矩形的长和宽:";
cin>>aa>>bb;
*ptr = new Rectangle(aa,bb);
break;
}
case 'u': //创建Cube类对象
{int aa,bb,cc;
cout<<"请输入立方体的长、宽、高:";
cin>>aa>>bb>>cc;
*ptr = new Cube(aa,bb,cc);
break;
}
case 't':
{
int side1,side2,side3;
cout<<"请输入三角形的三条边长度";
cin>>side1>>side2>>side3;
*ptr=new Triangle(side1,side2,side3);
break;
}
default:cout<<"类型错误,请重新选择\n";
}
}while(*ptr==NULL);
}
void display_area(Shape *ptr)
{ cout<<"显示所创建对象的面积,调用的是"<<endl;
cout<<ptr->getArea() << endl;
}
void delete_object(Shape *ptr)
{ delete(ptr);
}
#include<math.h>
using namespace std;
class Shape {
public:
virtual double getArea() const =0;
virtual void print() const =0;
virtual ~Shape(){}
};
class Circle : public Shape {
public:
Circle( int = 0, int = 0, double = 0.0 );
virtual double getArea() const; // 返回面积
virtual void print() const; // 输出Circle 类对象t
private:
int x,y; // 圆心座标
double radius; // 圆半径
}; // 派生类Circle定义结束
class Rectangle : public Shape {
public:
Rectangle( int = 0, int = 0); // 构造函数
virtual double getArea() const; // 返回面积
void print() const; // 输出Rectangle类对象
protected:
int a,b; // 矩形的长和宽
}; // 派生类
double Shape::getArea() const
{
cout<<"基类的getArea函数,面积是 ";
return 0.0;
} // Shape类getArea函数的定义
void Shape::print() const
{
cout<<"Base class Object"<<endl;
} //Shape类print函数定义
Circle::Circle( int xValue, int yValue, double radiusValue )
{
x=xValue; y=yValue;
radius= radiusValue ;
} // Circle类构造函数
double Circle::getArea() const
{
cout<<"Circle类的getArea函数,面积是 ";
return 3.14159 * radius * radius;
} // Circle类getArea函数定义
void Circle::print() const
{
cout << "center is ";
cout<<"x="<<x<<" y="<<y;
cout << "; radius is " << radius<<endl;
} // Circle类print函数定义
Rectangle::Rectangle( int aValue, int bValue )
{
a=aValue; b=bValue;
} // Rectangle类构造函数
double Rectangle::getArea() const
{
cout<<"Rectangle类的getArea函数,面积是 ";
return a * b;
} // Rectangle类getArea函数定义
void Rectangle::print() const
{
cout << "hight is "<<a;
cout<<"width is"<<b<<endl;
}
class Cube : public Rectangle { //派生类Cube的定义
public:
Cube(int x=0, int y=0, int z=0):Rectangle(x,y),c(z){};
double getArea() const;
void print() const;
private:
int c;
};
double Cube::getArea() const
{return a*b*c;}
void Cube::print() const
{
cout<<"Cube:h="<<c<<",length="<<a
<<",width="<<b<<",Area="<<a*b*c<<endl;
}
class Triangle:public Shape
{
protected:
double side1;
double side2;
double side3;
public:
Triangle(double x,double y,double z):side1(x),side2(y),side3(z){};
double getArea() const;
void print() const;
} ;
double Triangle::getArea() const
{
cout<<"Triangle类的getArea函数,面积是:"<<endl;
double p=0,q=0;
p=((side1+side2+side3)/2);
q=sqrt(p*(p-side1)*(p-side2)*(p-side3));
return q;
}
void Triangle::print() const
{
int p;
p=(side1+side2+side3)/2;
cout<<"Triangle:side1="<<side1<<",side2="<<side2
<<",side3="<<side3<<",p=(side1+side2+side3)/2"<<",Area="<<sqrt(p*(p-side1)*(p-side2)*(p-side3))<<endl;
}
void creat_object(Shape **ptr);
void display_area(Shape *ptr);
void delete_object(Shape *ptr);
int main()
{
Shape *shape_ptr;
creat_object(&shape_ptr);
display_area(shape_ptr);
delete_object(shape_ptr);
return 0;
}
void creat_object(Shape **ptr)
{ char type;
*ptr = NULL; //空指针
do{
cout<<"创建对象 请选择:";
cout<<endl;
cout<<"c:Circle类对象;r:Rectangle类对象;u:Cube类对象:t:Triangle类对象:"<<endl;
cin>>type;
switch (type)
{case 'c': //创建Ciecle类对象
{int xx,yy;
double rr;
cout<<"请输入圆心的坐标和圆的半径:";
cin>>xx>>yy>>rr;
*ptr = new Circle(xx,yy,rr);
break;
}
case 'r': //创建Rectangle类对象
{int aa,bb;
cout<<"请输入矩形的长和宽:";
cin>>aa>>bb;
*ptr = new Rectangle(aa,bb);
break;
}
case 'u': //创建Cube类对象
{int aa,bb,cc;
cout<<"请输入立方体的长、宽、高:";
cin>>aa>>bb>>cc;
*ptr = new Cube(aa,bb,cc);
break;
}
case 't':
{
int side1,side2,side3;
cout<<"请输入三角形的三条边长度";
cin>>side1>>side2>>side3;
*ptr=new Triangle(side1,side2,side3);
break;
}
default:cout<<"类型错误,请重新选择\n";
}
}while(*ptr==NULL);
}
void display_area(Shape *ptr)
{ cout<<"显示所创建对象的面积,调用的是"<<endl;
cout<<ptr->getArea() << endl;
}
void delete_object(Shape *ptr)
{ delete(ptr);
}
相关文章推荐
- 惨痛教训
- WebRTC代码走读(九):VoiceEngine和VideoEngine主要的控制类说明
- A - Dungeon Master(BFS)
- hdu1150 Machine Schedule
- 正则表达式
- [BZOJ 3224] [Tyvj 1728] 普通平衡树
- Android-ProgressBar
- 最长公共前缀
- MVC在安卓应用,ANR,Force Close,Contentprovider实现数据共享
- log4j输出格式
- cocoa 的大招(KVC的几点强大应用记录)
- java流程图
- centos 安装gdb
- 47Exchange 2010升级到Exchange 2013-迁移地址列表&OAB
- JAVA学习笔记二
- Apache与Nginx优缺点比较
- poj 1270 Following Orders 枚举排列
- poj 1363 Rails 【栈】
- Count Complete Tree Nodes
- 抽象类与接口的区别