其中包括姓名和衣服、裤子及鞋子的指针;将其衣服、裤子及鞋子分别设计成类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.