类的继承可以在原有类的基础上再派生一个类。原有的类叫做基类(父类)。派生出来的类叫做派生类(子类)。类的继承机制使得C++可以实现很大限度的代码复用。定义派生类的基本形式为
class 派生类名:访问权限 基类名
访问权限有三种,分别是public,private和protected,通常定义派生类的访问权限为public。派生类可以自动获得基类中的全部数据成员和成员函数,而且除了private类型,其他类型在在派生类中可以直接访问。派生类也可以定义自己的数据成员和成员函数。
派生类的对象在生成时,也需要利用构造函数进行初始化。在初始化时,会先调用基类的构造函数,对派生类中基类的数据成员进行初始化。然后再调用派生类自己的构造函数,对派生类的数据成员进行初始化。在销毁对象时,析构函数也是分别调用的。析构函数的调用顺序与构造函数相反。
对于不同的基类成员,访问权限是不同的
成员类型 | 访问权限 |
---|---|
public | 在类外和派生类中都可以访问 |
private | 只能在类内访问,不能在类外和派生类中访问 |
protected | 类内和派生类都可以访问,类外不可以访问 |
如果再定义一个成员时,没有指定访问说明符,默认为private。通过一个例子来了解一下继承
#include
using namespace std;
// 基类
class temp
{
public:
string name;
int age;
};
class temp1 : public temp
{
public:
string number;
};
int main()
{
temp1 a; // 定义一个类tenp1的对象
// 给对象a的成员赋值
a.name = "ertu";
a.age = 23;
a.number = "20230714";
// 输出对象a成员
cout << "姓名:" << a.name << endl;
cout << "年龄:" << a.age << endl;
cout << "编号:" << a.number << endl;
return 0;
}
输出结果为
姓名:ertu
年龄:23
编号:20230714
在派生类中可以定义一个与基类成员函数同名的函数,返回类型,参数个数和参数类型都可以相同。对于在基类中已经有定义的函数,如果在派生类中再定义一个同名的函数,这称为重构或者覆盖。对于在基类中仅有声明的函数,如果在派生类中定义一个同名的函数,这成为实现。
#include
using namespace std;
// 基类
class temp
{
public:
void function1 ()
{
cout << "调用基类函数1" << endl;
}
void function2 (); // 仅有一个声明
};
class temp1 : public temp
{
public:
// 重置基类成员函数1
void function1 ()
{
cout << "调用派生类成员函数1" << endl;
}
// 实现基类成员函数2
void function2 ()
{
cout << "调用派生类成员函数2" << endl;
}
};
int main()
{
temp a; // 定义一个temp类的对象
temp1 b; // 定义一个类tenp1的对象
// 调用成员函数
a.function1();
// a.function2(); // 基类中没有function的实现,不能调用
b.function1();
b.function2();
return 0;
}
输出结果为
调用基类函数1
调用派生类成员函数1
调用派生类成员函数2
/-------------------------------------------------2023.07.14未完成------------------------------------------------------/