C++入门经典-例8.1-类的继承

1:继承是面向对象的主要特征(此外还有封装和多态)之一,它使得一个类可以从现有类中派生,而不必重新定义一个新类。继承的实质就是用已有的数据类型创建新的数据类型,并保留已有数据类型的特点,以旧类为基础创建新类,新类包含了旧类的数据成员和成员函数,并且可以在新类中添加新的数据成员和成员函数。旧类被称为基类或父类,新类被称为派生类或子类。

2:类的继承形式如下:

class 派生类名称标识符:[继承方式] 基类名称标识符

{

    [访问控制修饰符:]

    [ 成员声明列表]

}

    继承方式有3中派生类型,分别为共有型(public)、保护型(protected)和私有型(privated),访问控制修饰符也是public、protected、private三种类型,成员声明列表中包含类的成员变量及成员函数,是派生类新增的成员。“:”是一个运算符,表示基类和派生类之间的继承关系。

3:一个小例子。定义一个员工类,它包含员工ID、员工姓名、所属部门等信息。

class CEmployee//定义员工类

{

public:

    int m_ID;//定义员工ID

    char m_Name[128];//定义员工姓名

    char m_Depart[128];//定义所属部门

}

    定义一个操作员类,通常操作员属于公司的员工,它包含员工ID、员工姓名、所属部门等信息,此外还包含密码信息、登录方法等。

class COperator :public CEmployee//定义一个操作员类,从CEmployee类派生而来

{

public:

    char m_Password[128];//定义密码

    bool Login();  

}

    操作员类是从员工类派生的一个新类,新类中增加密码信息、登录方法等,员工ID、员工姓名等信息直接从员工类中继承得到。

3:例子代码如下:

// 8.1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;
class CEmployee                            //定义员工类
{
public:
    int m_ID;                                //定义员工ID
    char m_Name[128];                        //定义员工姓名
    char m_Depart[128];                        //定义所属部门
    CEmployee()                            //定义默认构造函数
    {
        memset(m_Name,0,128);                //初始化m_Name//注意这种用法,可以随意设置名字和部门
        memset(m_Depart,0,128);            //初始化m_Depart
    }
    void OutputName()                            //定义共有成员函数
    {
        cout <<"员工姓名"<<m_Name<<endl;        //输出员工姓名
    }
};
class COperator :public CEmployee                //定义一个操作员类,从CEmployee类派生而来
{
public:
    char m_Password[128];                    //定义密码
    bool Login()                            //定义登录成员函数
    {
        if (strcmp(m_Name,"MR")==0 &&        //比较用户名。比较两个字符串,设这两个字符串为str1,str2,若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。
             strcmp(m_Password,"KJ")==0)        //比较密码
        {
        cout<<"登录成功!"<<endl;                //输出信息
            return true;                    //设置返回值
        }
        else
        {
            cout<<"登录失败!"<<endl;            //输出信息
            return false;                    //设置返回值
        }
    }
};
int main(int argc, char* argv[])
{
    COperator optr;                            //定义一个COperator类对象
    strcpy(optr.m_Name,"MR");                //访问基类的m_Name成员
    strcpy(optr.m_Password,"KJ");                //访问m_Password成员
    optr.Login();                            //调用COperator类的Login成员函数
    optr.OutputName();                        //调用基类CEmployee的OutputName成员函数
    return 0;
}
View Code

运行结果:

C++入门经典-例8.1-类的继承

     程序中,CEmployee类是COperator类的基类,也就是父类。COperator类将继承CEmployee的所有非私有成员(private类成员不能被继承)。

    用户在父类中派生子类时,可能存在一种情况,即在子类中定义了一个与父类同名的成员函数,此时称为子类隐藏了父类的成员函数。