类得继承与组合

类的组合:

在一个类中,可以用类对象作为数据成员,即子对象。对象成员的类型是基类。实际上,对象成员的类型可以是基类,也可以是另外一个已定义的类。在一个类中以另一个类对象作为数据成员,称为类的组合。下面通过一个简单的例子来介绍一下:

例1.声明Professor(教授)类是Teacher(教师)类的派生类,另一个类BirthDate(生日),包含year,month,day等数据成员。可以将教授生日的信息加入到Professor类的声明中。

#include <iostream>
#include <string>
using namespace std;
class Teacher             //基类
{
public:
 Teacher(int n, string nam, char s)
 {
  num=n;
  name=nam;    
  sex=s;
 }
 ~Teacher(){}
 void display()
 {
  cout<<num<<endl;
  cout<<name<<endl;  
  cout<<sex<<endl;
 }
protected:
 int num;
 string name;
 char sex;
};
class BirthDate        //组合类
{
public:
 BirthDate(int y,int m,int d)
 {
  year=y;
  month=m;
  day=d;
 }
 ~BirthDate(){}
 void display()
 {
  cout<<year<<endl;
  cout<<month<<endl;
  cout<<day<<endl;
 }
private:
 int year;
 int month;
 int day;
};
class Professor:public Teacher
{
public:
 Professor(int n, string nam, char s, BirthDate b):Teacher(n, nam, s),birthday(b){}  //组合派生类的构造函数初始化
 ~Professor(){}
 void fun2()
 {
  birthday.display();
 }
private:
 BirthDate birthday;
};
void fun1(Teacher & t)    //形参是Teacher类对象的引用,实参为Teacher类的子类对象
{
 t.display();
}
int main()
{
 BirthDate bir(1960,7,30);                  //初始化
 Professor prof1(1001,"wang",'f',bir);      //初始化
 fun1(prof1);
 prof1.fun2();
 return 0;
}

类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。通过继承建立了派生类与基类的关系,他是一种“是”的关系,如“白猫是猫”,“黑人是人”,派生类是基类的具体化实现,是基类中的一种。通过组合建立了成员类和组合类的关系,在本例中BirthDate是成员类,Professor是组合类。他们之间不是“是”的关系,而是有的关系,不能说教授(Professor)是一个生日(BirthDate),只能说教授(Professor)有一个生日(BirthDate)的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值