现在的位置: 首页 > 综合 > 正文

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

2019年03月20日 ⁄ 综合 ⁄ 共 2999字 ⁄ 字号 评论关闭
文章目录

试题一

设计一个人员类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.

抱歉!评论已关闭.