继承和派生
从一个或多个已定义的类(基类)产生新类的过程叫做派生,这个新类叫做派生类。基类和派生类,也可以形象化的叫做父类和子类。继承的实质就是创造新的派生类。派生类继承自基类,它继承了基类的数据和函数,同时也可以自己增加或重新定义数据和操作。
上面是概念,不懂没关系,我们用一个例子简单说明。宠物Pet可以看成是一个类,宠物有性别、年龄、名字的属性,也有叫的动作。宠物有很多种,例如小狗、小猫等。所以宠物Pet可以作为父类,然后小狗、小猫可以从父类中派生出来,作为子类。子类继承了父类的数据和函数,也就是小狗小猫都有性别、年龄、名字的属性,也有叫的动作等, 此外小猫还可以有自己独特的函数,例如抓老鼠等。
继承是C++的重要特性之一,常用来表示隶属关系。从父类中派生出子类时,子类可以有以下变化:
1. 增加新的数据成员和函数
2. 重新定义已有的成员函数
3. 改变现有的成员的属性
父类的定义方式,就是我们之前一直用的,下面看子类的定义方式:
class 子类名: 继承方式 父类1,继承方式 父类2...
{
新成员的定义
};
举个例子:
#include <iostream>
using namespace std;
class Location
{
public:
void SetXY(int a,int b){x=a;y=b;}
void PrintXY(){cout<<"x= "<<x<<" y= "<<y<<endl;}
private:
int x,y;
};
class Rectangle: public Location
{
public:
void SetHW(int a,int b){h=a;w=b;}
void PrintHW(){cout<<"h= "<<h<<" w= "<<w<<endl;}
private:
int h,w;
};
void main()
{
Rectangle r;
r.SetXY(1,1);
r.PrintXY();
r.SetHW(2,3);
r.PrintHW();
}
Rectangle类继承自父类Location,继承方式是Public,除此之外,还有Private和Protected两种继承方式,下一节会专门讲继承方式。父类Location中定义了两个数据成员x,y,以及两个成员函数SetXY和PrintXY,子类Rectangle中新定义了两个数据成员h,w,以及两个成员函数SetHW和PrintHW。
main函数中声明Rectangle类的对象r,子类的对象r可以访问到父类的成员函数SetXY和PrintXY,输出结果为:
x= 1 y= 1
h= 2 w= 3