零基础学C++进阶篇四
零基础学C++进阶篇四
继承与派生
继承与派生是面向对象程序设计的两个重要特性,继承是从已有的类那里得到已有的特性,已有的类为基类或父类,新类被称为派生类或子类。继承与派生是从不同角度说明类之间的关系,这种关系包含了访问机制、多态和重载等。
继承
继承是面向对象的主要特征之一,它使得一个类可以从现有类中派生,而不必重新定义一个新类。继承的实质就是用已有的数据类型创建新的数据类型,病保留已有数据类型的特点,以旧的类为基础创建新类,新类包含了旧类的数据类型和成员函数,并可以在新类中添加新的数据成员和成员函数。
类的继承
类继承的形式如下:
class 派生类名标识符:[继承方式] 基类名标识符
{
[访问控制修饰符:]
[成员声明列表]
};
继承的方式3种派生类型,分别为public、protected、private,访问控制修饰符是public、protected、private三种类型,成员声明列表中包含类的成员变量及成员函数,是派生类的新增成员。“:”是一个运算符,表示基类和派生类之间的继承关系。
实例01 继承操作员类新增员工信息
#include <iostream>
using namespace std;
class Employee
{
public:
int m_id;
char m_name[128];
char m_depart[128];
Employee()
{
memset(m_name,0,128);
memset(m_depart,0,128);
}
void outputName()
{
cout << "员工姓名" << m_name << std;
}
};
class Operator : public Employee
{
public:
char m_password[128];
bool login()
{
if(strcmp(m_name,"MR") == 0 &&
strcmp(m_password,"KJ") == 0)
{
cout << "登录成功!" << endl;
return true;
}else
{
cout << "登录失败" << endl;
return false;
}
}
};
int main(int argc,char *argv[])
{
Operator optr;
strcpy(optr.m_name,"MR");
strcpy(optr.m_password,"KJ");
optr.login();
optr.outputName();
return;
}
继承后可访问性
继承方式有public、private、protected三种,其说明如下:
-
公有型派生
公有型派生表示对于基类中的public数据成员和成员函数,在派生中仍然是public,对于基类中的private数据成员和成员函数,在派生类中仍然是private。派生类无法访问父类中private成员,可以访问父类public的成员。 -
私有型派生
私有型派生表示在基类中public、protected数据成员和成员函数,在派生类中可以访问。基类中的private数据成员,在派生类中不可访问。 -
保护型派生
保护型派生表示在基类中的public、protected数据类型和成员函数,在派生类中均protected,protected类型在派生类定义时可以访问,用派生类声明的对象不可以访问。
构造函数访问顺序
实例03 父类和子类的构造函数访问顺序
#include <iostream>
using namespace std;
class Employee
{
public:
int m_id;
char m_name[128];
char m_depart[128];
Employee()
{
cout << "Employee类构造函数被调用" << endl;
}
~Employee()
{
cout << "Employee类析构函数被调用" << endl;
}
};
class Operator : public Employee
{
public: