C++笔记——继承(代码还有些问题)

来源:互联网 发布:三年级数学算法 编辑:程序博客网 时间:2024/06/07 07:24

继承的概念
继承是 C++中类机制的一部分,该机制使类与类之间可以建立一种上下级关系,继承是一种手段,利用继承机制,可以根据另一个类的操作和数据成员来创建新类。
利用继承可以在原有类的基础上构造新类,这一性质使得类与类之间可以建立一种上下级的分类关系。可以说,继承使人们描述事物的能力大大加强和简单化了。

派生类就是实现继承的,它继承了起父类的属性和操作,那些父类已经存在,在新的应用中无需修改,所要做的就是派生子类,在子类中做一些添加和修改,这种机制使重用成为可能。

继承的工作方式
下面的例子给出了通过已有的Person类来创建一个新类——Employee,二者显然有着某种关系,这也说明了继承的作用。!

//10月3日第二个程序#include "stdafx.h"#include<iostream>#include<iomanip>#include<string>using namespace std;class Person  //先定义一个“人”类{public:    string m_strName;  //字符串类型,姓名    string m_strBirthDate;  //出生年月    Person()    {        m_strName = "noNzme";        m_strBirthDate = "yyyy-mm-dd";    }};    class Employee : public Person   //在Person类基础上构造一个Employee类    {    public:               string m_strHireDate;   //只需单独写出自己新增的类成员        Employee(char *Name, char *BirthDate, char *HireDate)        {            m_strName = Name;            m_strBirthDate = BirthDate;            m_strHireDate = HireDate;        }    };    int main()    {        Employee aEmp("Mao Huifei","1977-10-01","2001-05-01");        cout << ">>>>>>>Employee>>>>>>>"<<endl;        cout << "NAME:" << aEmp.m_strName << endl;        cout << "BirthDate:" << aEmp.m_strBirthDate << endl;        cout << "HireDate:" << aEmp.m_strHireDate<<endl;        return 0;    }

运行结果如下:
这里写图片描述

显然,子类Employee 包含了父类成员和它自己所特有的成员,所以通过子类对象不仅可以访问自己的数据成员,还可以访问父类成员。对于父类中的public 成员,在子类中它们仍然是public 的,子类还可以像访问它自己的成员一样直接访问它们。
例如,在Employee 子类的构造函数中,且然没有定义姓名和出生日期数据成员,但一样可以访问它们。

Employee(char *Name, char *BirthDate, char *HireDate)        {            m_strName = Name;            m_strBirthDate = BirthDate;            m_strHireDate = HireDate;        }    };

注意:子类可以直接访问基类的public和protected成员,但是不能直接访问基类中private成员如果需要在派生类中访问基类的private成员,也只能通过访问基类的public成员实现。

下面的程序演示了怎样访问基类的private 成员。

//10月3日第3个程序#include "stdafx.h"#include<iostream>#include<iomanip>#include<string>    using namespace std;    class Person  //先定义一个“人”类    {    private:        string m_strName;  //字符串类型,姓名        string m_strBirthDate;  //出生年月    public:        void SetName(char *Name)        {            m_strName = Name;        }        string & GetName()        {            return m_strName;        }        void SetName(char *Name)        Person()        {            m_strName = "noNzme";            m_strBirthDate = "yyyy-mm-dd";        }    };    class Employee : public Person   //在Person类基础上构造一个Employee类    {    public:        string m_strHireDate;   //只需单独写出自己新增的类成员        Employee(char *Name, char *BirthDate, char *HireDate)        {            m_strName = Name;            m_strBirthDate = BirthDate;            m_strHireDate = HireDate;        }    };    int main()    {        Employee aEmp("Mao Huifei", "1977-10-01", "2001-05-01");        cout << ">>>>>>>Employee>>>>>>>" << endl;        cout << "NAME:" << aEmp.m_strName << endl;        cout << "BirthDate:" << aEmp.m_strBirthDate << endl;        cout << "HireDate:" << aEmp.m_strHireDate << endl;        return 0;    }    lincludeciostream >        pincludeciomanip>        include<string>        using namespace std;    class Person        pr ivate :    string mstrName;    str ing m strBirthDate;    pub lici -        voi dSetName(char *Name)        m s t rName - Name;    string& GetName()        return m strName;    vo id SetBirthDate(char *BirthDate)        m strBirthDate = BirthDate;    GetBirthDate()        string&        return m_strBirthDate;