• 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

    运行结果:

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

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

  • 相关阅读:
    一段路
    memcache 键名的命名规则以及和memcached的区别
    浏览器解释网页时乱码
    windows下安装Apache
    巧用PHP数组函数
    程序返回值的数据结构
    Linux如何生成列表
    判断用户密码是否在警告期内(学习练习)
    判断用户的用户名和其基本组的组名是否一致
    sed笔记
  • 原文地址:https://www.cnblogs.com/lovemi93/p/7565163.html
Copyright © 2020-2023  润新知