程序实践系列(八)继承与派生

来源:互联网 发布:淘宝号星级怎么算的 编辑:程序博客网 时间:2024/06/05 14:07

试题一

设计一个人员类person

其中包括姓名和衣服、裤子及鞋子的指针;将其衣服、裤子及鞋子分别设计成类clothes、pants和shoe的对象,这3个类都是从物品类object派生的, object类包括物品类型和颜色数据成员;并采用相关数据进行测试。

解:clothes、pants和shoe这3个类(统称为穿着类)都是从object类公共派生的,person类包含指向这些穿着类对象的指针,并有一个输出人员姓名和穿着的成员函数。

参考代码

#include <iostream> #include <string>   using namespace std;  class object    //物品类  {  protected:   char color[10];        //物品类型   char type[10];         //颜色  public:   object() {}   object(char *t,char *c) //重载构造函数   {    strcpy(type,t);    strcpy(color,c);  }  };   class shoe : public object  //鞋子类  { private:   friend class person; //person类作为shoe的友元类 public:  shoe(char *t,char *c) : object(t,c) {} }; class clothes : public object  //衣服类  { private:  friend class person; //person类作为clothes的友元类 public:  clothes(char *t,char *c) : object(t,c) //构造函数  {} }; class pants : public object //裤子类 { private:  friend class person; //person类作为pants的友元类 public:  pants(char *t,char *c):object(t,c) //构造函数  {} }; class person   //人员类 { protected:  char name[10];   //姓名  clothes *myclothes;  //指向clothes对象的指针  shoe *myshoe;   //指向shoe对象的指针 pants *mypants;   //指向pants对象的指针 public:    person(char *na)              //构造函数  {   strcpy(name,na); }  void wear(shoe & ashoe)       //穿着鞋子成员函数  {   myshoe=&ashoe;  }  void wear(clothes & aclothes) //穿着衣服成员函数  {   myclothes=&aclothes;  }  void wear(pants & apants)     //穿着裤子成员函数  {   mypants=&apants;  }  void show()      //输出一个人的穿着情况  {   cout << "姓名:" << name <<  endl;   cout << "穿着" << myclothes->color << myclothes->type <<",";   cout << mypants->color << mypants->type << "和";cout << myshoe->color << myshoe->type << endl; }  };   int  main()  { person p1("王华"),p2("李明"); clothes clothes1("西装","黑色"),clothes2("运动服","蓝色"); pants pants1("西裤","黑色"),pants2("运动裤","蓝色"); shoe shoe1("皮鞋","棕色"),shoe2("运动鞋","黑色");     p1.wear(clothes1); //p1对象的指定穿着   p1.wear(pants1);   p1.wear(shoe1);     p2.wear(clothes2); //p2对象的指定穿着   p2.wear(pants2);   p2.wear(shoe2);     p1.show();  p2.show();    return 0; } 

测试结果

试题二

假设图书馆的图书包含书名、编号和作者属性,读者包含姓名和借书证属性,每位读者最多可值5本书,编写程序列出某读者的借书情况;并采用相关数据进行测试。

解:设计一个类object,从它派生出图书类book和读者类reader,在reader类中有一个rentbook()成员函数用于借阅图书。

参考代码

 #include <iostream>  #include <string>   using namespace std;   class object  //object类  {   char name[20];   int no;  public:   object() {}     //构造函数   object(char na[],int n)  //重载构造函数   {    strcpy(name,na);no=n;   }   void setobject(char na[],int n)   {    strcpy(name,na);no=n;   }     void show()   {    cout << name << "(" << no << ")";} }; class book : public object  //从object派生book类 {  char author[10]; public:  book() {}  book(char na[],int n,char auth[]):object(na,n)  {   strcpy(author,auth);  }  void setbook(char na[],int n,char auth[]) {   setobject(na,n);   strcpy(author,auth);  }  void showbook()  {   show();   cout << " 作者:" << author;  } }; class reader :public object  //从object派生reader类 {  book rent[5]; //所借图书  int bnum;  //所借图书总数 public:  reader() { bnum=0; }  reader(char na[],int n):object(na,n) { bnum=0; }  void rentbook(book &b)  {   rent[bnum]=b;   bnum++;  }  void setreader(char na[],int n)  {   setobject(na,n);  }  void showbook()  //列出所借全部图书  {   cout << "读者:";show();   cout << endl << "所借图书:" << endl;   for (int i=0;i<bnum;i++)   {    cout << "     " << i+1 << ":";   //5个空格     rent[i].show();    cout << endl;   }  } };int main()  {   book b1("C语言",1,"潭浩强"),b2("数据结构",2,"严蔚敏"),b3,b4,b5;   reader r1("王华",1),r2;   b3.setbook("VB程序设计",3,"成功");   b4.setbook("数据库原理",4,"王瑟");   b5.setbook("计算机导学",5,"张仁");   r2.setreader("李明",2);   r1.rentbook(b1);   r1.rentbook(b3);   r2.rentbook(b2);    r2.rentbook(b4);    r2.rentbook(b5);   r1.showbook();   r2.showbook();  } 

测试结果


关于Program Language更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.





0 0
原创粉丝点击