抛砖引玉
前面介绍了类,一个类中包含了若干数据成员和成员函数。在不同的类中,数据成员和成员函数是不相同的。但有时两个类的内容基本相同或有一部分相同。假设我们已声明了学生基本数据的类 Student ;其中包括学生的学号、姓名、性别的信息,如果我们还需要用到年龄、家庭住址等信息,就要重新再定义一个学生类。很显然,我们新定义的学生类有相当一部分是原来已有的(学号、姓名、相别),那么是否能利用原来声明的 Student 类作为基础,在加上新的内容即可。C++ 提供的继承机制就很好的解决了这个问题。
继承和派生(概念及关系)
一起来先看一个例子:
class Student
{
public:
void show()
{
cin >> num >> name;
}
void display()
{
cout << "num: " << num << endl;
cout << "name: " << name << endl;
}
int num;
int name;
};
class Student1:public Student
{
public:
void display1()
{
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "age: " << age << endl;
}
private:
int age;
};
可以看出,在 Student1 中并未创建 num 和 name 成员,但依旧可以访问,这就是继承。“继承”就是在一个已存在的类的基础上建立一个新的类。
一个新类从已有类那里获得其已有的特性称为“类的继承”。
通过继承,一个新建子类从已有的父类那里获得父类的特性。换句话说,从已有的类产生一个新的子类,称为类的派生。
继承和派生的关系如下图所示:
>
概括的讲,派生类是基类的具体化,而基类是派生类的抽象。基类综合了派生类的公共特征,派生类则在基类的基础上增加某些特征。
派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整。一个基类可有多个派生类,一个派生类也可有作为基类再派生出新的派生类。
继承方式分类
在刚才的代码中,可以看出声明派生类的一般形式为:
class 派生类名:[继承方式] 基类名
{
派生类新增加的成员
}
在派生类中,对基类的继承方式可以有 public (公有的)、private(私有的)、protected(保护的)3种。不同的继承方式决定了基类成员在派生类中的访问属性。
- 继承关系为 public 时:
class Student
{