问题设计一个名为GeometricObject的类,用来建模所有的几何对象。GeometricObject类包含:
string类型的属性color,用来表示几何对象的颜色(默认值:white)。
Bool类型的属性filled,用来表示几何对象是否填充颜色(默认值:false)
一个无参的构造函数,它创建一个缺省的几何对象(颜色为white,未填充颜色)。
一个带参数的构造函数,它创建一个指定color和filled值的几何对象。
数据成员color的访问器函数getColor()和更改器函数setColor()。
数据成员filled的访问器函数isFilled()和更改器函数setFilled()。
一个名为toString()的常量函数,返回几何对象的字符串描述,如“Geometric Object”。
设计一个名为Triangle的类,作为GeometricObject的派生类,Triangle类包含:
三个名为 side1、side2、side3的double型数据成员,表示三角形的三条边长。
一个无参的构造函数,它创建一个缺省的三角形(边长为1.0)。
一个带参数的构造函数,它创建一个指定side1、side2和side3值的三角形。
可以访问所有三个数据成员的访问器函数。
一个名为 getArea()的常量函数,返回三角形的面积。
一个名为getPerimeter()的常量函数,返回三角形的周长。
一个名为toString()的常量函数,返回三角形对象的字符串描述,如“Triangle Object”。
实现该类。编写一个测试程序,提示用户输入三角形的三条边,输入一种颜色,并且输入1或0来指示是否该三角形被填充。程序应使用用户的输入来创建具有三条边和颜色设置及填充属性的Triangle对象。程序应输出面积、周长、颜色以及是否被填充。
#include <iostream>
#include <math.h>
#include <string>
using namespace std;
class geoment{
private:
string color;
bool filled;
public:
geoment(){color="white";filled=false;}
geoment(string x,bool y)
{
color=x;
filled=y;
}
void setcolor(string x){color=x;}
string getcolor(){return color;}
void setfilled(bool y){filled=y;}
bool getfilled(){return filled;}
const void tostring(){cout<<"属性:"<<"Geometric Object"<<endl;}
};
class Triangle:public geoment{
private:
double side1,side2,side3;
public:
Triangle(){side1=1;side2=1;side3=1;}
Triangle(string color,bool filled,double x1,double x2 ,double x3):geoment(color,filled),side1(x1),side2(x2),side3(x3){};
void get1(double x1){ side1=x1;} //上面就是在派生类构造函数中对基类的成员的初始化的方式,注意一下!!!
void get2(double x2){ side2=x2;}
void get3(double x3){ side3=x3;}
const double getarea()
{
double z;
z=(side1+side2+side3)/2;
return sqrt(z*(z-side1)*(z-side2)*(z-side3));
}
const double getperimenter()
{
return side1+side2+side3;
}
const void tostring()
{
geoment::tostring();
cout<<"属性:"<<"Triangle object"<<endl;
}
};
int main()
{
Triangle t;
int x1,x2,x3;
string colors;
bool filleds;
cin>>x1>>x2>>x3>>colors>>filleds;
t.get1(x1);
t.get2(x2);
t.get3(x3);
t.setcolor(colors);
t.setfilled(filleds);
t.geoment::tostring();//这里用派生类调用基类的成员函数的方式,注意一就可以了;
cout<<"面积:"<<t.getarea()<<","<<"周长:"<<t.getperimenter()<<","<<endl;
t.tostring();
if(filleds) cout<<"填充完毕"<<endl;
else cout<<"未填充"<<endl;
return 0;
}
注意事项:
1这里是简单的派生类的应用,注意,这里是公有派生,注意在派生类里面的构造函数对基类的初始化的形式,采用参数列表的形式来写,
2,要注意的是在主函数怎样用派生类的对象调用的基类的函数,以上代码写明了