C++编程入门(二) 互动版

继承和派生

从一个或多个已定义的类(基类)产生新类的过程叫做派生,这个新类叫做派生类。基类和派生类,也可以形象化的叫做父类和子类。继承的实质就是创造新的派生类。派生类继承自基类,它继承了基类的数据和函数,同时也可以自己增加或重新定义数据和操作

上面是概念,不懂没关系,我们用一个例子简单说明。宠物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