2015级C++第5周项目 类和对象

来源:互联网 发布:得熊猫者得天下知乎 编辑:程序博客网 时间:2024/06/11 03:25

【项目1 - 三角形类雏形】

[参考解答]
(1)下面设计一个三角形类,请给出各成员函数的定义

class Triangle{public:    void setABC(double x, double y, double z);//置三边的值,注意要能成三角形    double perimeter();//计算三角形的周长    double area();//计算并返回三角形的面积private:    double a,b,c; //三边为私有成员数据};int main(){    Triangle tri1;  //定义三角形类的一个实例(对象)    tri1.setABC(4,5,6); //为三边置初值    cout<<"三角形的周长为:"<< tri1.perimeter()<<'\t'<<"面积为:"<< tri1.area()<<endl;    return 0;}//请在下面定义Triangle类中的各个成员函数

(2)在上面程序的基础上,重新定义Triangle类,其中逻辑特别简单的set和get成员函数,要处理为内联成员函数,直接在类内定义。

int main()  {      Triangle tri1;  //定义三角形类的一个实例(对象)      double x,y,z;      cout<<"请输入三角形的三边:";      cin>>x>>y>>z;      tri1.setA(x);      tri1.setB(y);      tri1.setC(z);   //为三边置初值      if(tri1.isTriangle())  //isTriangle()返回值为布尔型,用于判断给出的三边是否能构成一个三角形    {          cout<<"三条边为:"<<tri1.getA()<<','<<tri1.getB()<<','<<tri1.getC()<<endl;          cout<<"三角形的周长为:"<< tri1.perimeter()<<'\t'<<"面积为:"<< tri1.area()<<endl;      }      else          cout<<"不能构成三角形"<<endl;      return 0;  }  

(3)设计三角形类带参数的构造函数,即Triangle(double x, double y, double z),三边长在调用时由实参直接给出,使对象在定义时能够进行初始化。需要的测试函数是:

int main(){    Triangle Tri(7,8,9);    //定义三角形类的一个实例(对象)    Tri.showMessage(); //定义一个能显示三角形信息的成员函数    return 0;}

(4)使用有默认参数的构造函数,不给定实参时,默认边长为1;注意——只需要一个构造函数即可。需要的测试函数是:

int main(){    Triangle Tri1;   //定义边长为1 1 1的三角形类实例    Tri1.showMessage();    Triangle Tri2(1.5);//定义边长为1.5 1 1的三角形类实例    Tri2.showMessage();    Triangle Tri3(1.5,1.5);//定义边长为1.5 1.5 1的三角形类实例    Tri3.showMessage();    Triangle Tri4(7,8,9); //定义边长为7 8 9的三角形类实例    Tri4.showMessage();    return 0;}

(5)使用复制构造函数,能用一个已有的三角形对象,复制出新的三角形对象:

int main(){    Triangle Tri1(3,4,5);   //定义边长为1 1 1的三角形类实例    Tri1.showMessage();    Triangle Tri2(Tri1); //调用复制构造函数    Tri2.showMessage();    return 0;}

【项目2-游戏中的角色类】

[参考解答]
(1)基于下面设计的游戏中角色类,补充完整需要的成员函数,使角色能一定的规则行动或改变状态。下面代码中包含的是最基本的要求,可以根据你的设计进行扩充。

class Role{public:    ……private:    string name;    int blood;    bool life;};int main( ){    Role mary;    mary.setRole("Mary", 4);    mary.show();    mary.attack();    mary.eat(2);    mary.beAttack();    mary.beAttack();    mary.show();    return 0;}

(2)设计构造函数,使角色对象在创建时被初始化;设计析构函数,当角色对象被撤消时,提示一句“XXX(名称)退出江湖…”。可以用下面的代码进行测试,运行结果参考右图:

int main( ){    Role mary("Mary", 4);    Role jack("Jack", 0);    mary.show();    jack.show();    return 0;}

【项目3 - 时间类】

[参考解答]
阅读、运行程序后,按要求扩充类的功能

class Time{public:    void set_time( );       void show_time( );  private:     bool is_time(int, int, int);       int hour;    int minute;    int sec;};void Time::set_time( ) {    char c1,c2;    cout<<"请输入时间(格式hh:mm:ss)";    while(1)    {    cin>>hour>>c1>>minute>>c2>>sec;        if(c1!=':'||c2!=':')            cout<<"格式不正确重输"<<endl;        else if (!is_time(hour,minute,sec))            cout<<"时间非法,请重新输入"<<endl;        else             break;    }}void Time::show_time( )      {    cout<<hour<<":"<<minute<<":"<<sec<<endl;}bool Time::is_time(int h,int m, int s){    if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)        return false;    return true;}int main( ){    Time t1;      t1.set_time( );       T1.show_time( );    return 0;}

要求:
(1)请在原类基础上,在类内增加下列成员函数(将是内联成员函数)

  • add_a_sec() //增加1秒钟
  • add_a_minute() //增加1分钟
  • add_an_hour() //增加1小时

在main()数中,调用新增加的成员函数,以测试扩充后的功能。
(2)再增加三个成员函数,要求在类内声明,类外定义。

  • add_seconds(int) //增加n秒钟
  • add_minutes(int) //增加n分钟
  • add_hours(int) //增加n小时

提示:

  • 要考虑增加后超出取值范围的情形;
  • 增加n秒后,秒数可能会超过60,调整秒数,并可以调用增加分钟数的成员函数,使时间合法;同理,增加分钟数也有类似问题。

【项目4 - 长方柱类】

[参考解答]
  编写基于对象的程序,求3个长方柱(Bulk)的体积。数据成员包括长(length)、宽(width)、高(heigth)、体积,要求设计成员函数实现下面的功能:
(1)由键盘输入3个长方柱的长、宽、高;
(2)计算长方柱的体积(volume)和表面积(areas);
(3)输出这3个长方柱的体积和表面积。

2 0
原创粉丝点击