C++中类的继承
在C++中,类的继承是一种重要的面向对象编程机制,它允许一个类(称为子类或派生类)继承另一个类(称为基类或父类)的属性和方法
。派生类可以继承基类的成员变量和成员函数,这使得代码能够复用基类已有的功能,减少重复代码的编写。
其中继承方式可以是公有继承(public)、保护继承(protected)或私有继承(private)。
代码示例
C++中类的继承格式如下:
class 派生类名 : 继承方式 基类名
继承方式
公有继承(public):当一个类使用public关键字进行继承时,基类的公有成员和保护成员在派生类中保持原有的访问级别,而基类的私有成员仍然保持私有。
保护继承(protected):当一个类使用protected关键字进行继承时,基类的公有成员和保护成员在派生类中都成为保护成员,只能被派生类的成员函数或友元访问。
私有继承(private):当一个类使用private关键字进行继承时,基类的公有成员和保护成员在派生类中都成为私有成员,无法被派生类的子类访问。
//基类
class Base {
public:
void pub_method() {
} // 公有方法
protected:
void prot_method() {
} // 保护方法
private:
void priv_method() {
} // 私有方法
};
//公有继承
class Derived1 : public Base {
public:
void use_base_method() {
pub_method(); // 可以访问
prot_method(); // 可以访问
// priv_method(); // 错误:无法访问
}
};
//保护继承
class Derived2 : protected Base {
public:
void use_base_method() {
pub_method(); // 可以访问
prot_method(); // 可以访问
// priv_method(); // 错误:无法访问
}
};
//私有继承
class Derived3 : private Base {
public:
void use_base_method() {
pub_method(); // 可以访问
prot_method(); // 可以访问
// priv_method(); // 错误:无法访问
}
};
访问情况
派生类可以访问基类的公有成员,被保护的成员和私有成员可以调用友元函数或使用指针间接访问。但是基类是不能直接访问派生类的任何一个成员的,不过可以通过友元函数的调用或使用指针间接访问。 因为派生类是在基类定义以后产生的。
派生类的子类能够访问派生类基类的成员函数和继承派生类基类的属性。
在C++中,当一个类从另一个类派生时,它继承了基类的所有公有和保护成员(私有成员不会被继承)。这意味着派生类的子类可以访问这些被继承的成员,但具体的访问权限取决于基类中成员的访问修饰符以及派生时的继承方式。
通过实例对象对成员函数的调用提示也可以发现访问机制
派生类子类的实例对象的访问机制
简单练手
功能需求
设计一个“(人员类)”基类。考虑到通用性,具有的属性:编号、姓名、性别、出生日期、身份证号等;
从(人员类)派生出(学生类),并添加属性:班级;
从(人员类)派生出(教师类),并添加属性:职务、部门;
从(学生类)派生出(研究生类),并添加属性:专业、导师(该属性是教师类对象);
从(研究生类)和(教师类)派生出(助教生类),无新的属性。
编写main函数测试这些类。
运行结果
代码
#include <iostream>
#include <string>
using namespace std;
// 基类:人员类
class dly_Person {
protected:
string id;
string name;
string gender;
int age;
string birthDate;
string idNumber;
public:
// 定义一个dly_Person类的构造函数。用于在创建类的实例对象时自动调用,初始化列表中的冒号后面的部分是成员变量的初始化列表。
dly_Person(string id, string name, string gender, int age, string birthDate, string idNumber)
: id(id), name(name), gender(gender), age(age), birthDate(birthDate), <