• C++入门--继承


    一、组合与继承

    举例:

     1 #include <iostream>
     2 
     3 class CPerson {
     4 public:
     5     CPerson() {}
     6     ~CPerson() {}
     7     //获取性别
     8     int GetGender() {
     9         return m_nGender;
    10     }
    11     //设置性别
    12     void SetGender(int nGender) {
    13         m_nGender = nGender;
    14     }
    15 private:
    16     char m_szName[255];
    17     int m_nGender;
    18 };
    19 
    20 class CStudent
    21 {
    22 public:
    23     CStudent() {}
    24     ~CStudent() {}
    25     CPerson m_per;  //把一个类放到另一个类里做成员--组合关系
    26 private:
    27     int m_nStuID;
    28 };
    29 
    30 class CTeacher
    31 {
    32 public:
    33     CTeacher() {}
    34     ~CTeacher() {}
    35     CPerson m_per;
    36 private:
    37     int m_TeaID;
    38 };
    39 
    40 int main()
    41 {
    42     CStudent stu;
    43     stu.m_per.SetGender(1);
    44     return 0;
    45 }

    在上面我们通过在学生类与教师类中包含person类,来使他们获取person的一些属性。这种关系,我们称之为组合关系

    #include <iostream>
    
    class CPerson {
    public:
        CPerson() {}
        ~CPerson() {}
    
        int GetGender() {
            return m_nGender;
        }
    
        void SetGender(int nGender) {
            m_nGender = nGender;
        }
    private:
        char m_szName[255];
        int m_nGender;
    };
    
    class CStudent:public CPerson
    {
    public:
        CStudent() {}
        ~CStudent() {}
    private:
        int m_nStuID;
    };
    
    class CTeacher:public CPerson
    {
    public:
        CTeacher() {}
        ~CTeacher() {}
    private:
        int m_TeaID;
    };
    
    int main()
    {
        CStudent stu;
        stu.SetGender(1);
        return 0;
    }

    除了组合,更方便的还可以用继承实现。

    继承:子类 ---->父类   派生类--->基类

    二、继承的可见性

    继承的可见性在什么时机做的检查?

     是编译器在编译的时候做的限制,但是在程序运行时,可以通过指针去修改访问被限制的变量。

    sizeof(CPerson) = 12字节 (3个int型变量)

    sizeof(CStudent) = Sizeof(CPerson)+4字节(m_StuID) = 16字节

    三、继承中的访问控制

    public     继承:父类成员在子类中保持原有访问级别

    private    继承:父类成员在子类中变为private成员

    protected继承:父类中public成员会变成protected

            父类中protected成员仍然为protected

                                父类中private成员仍然为private

    派生类类成员访问级别设置的原则

    如何恰当的使用publicprotectedprivate为成员声明访问级别?

    1、需要被外界访问的成员直接设置为public

    2、只能在当前类中访问的成员设置为private

    3、只能在当前类和子类中访问的成员设置为protectedprotected成员的访问权限介于publicprivate之间。

    三、派生类中的函数隐藏

    函数隐藏:发生在基类和派生类中,函数完全相同时且基类没有虚函数。
    或者函数只是同名,参数列表不同,无论是否有虚函数,都讲发生隐藏。

    关于隐藏:在没有虚函数的情况下,发生函数隐藏。在编译的时候进行早期绑定,子类对象转换为父类对象后,用父类对象指针去调用的时候,我们还是调用父类的所在内存。因为子类对象所占内存的前半部分仍然是父类对象的内存。

  • 相关阅读:
    C# 基础笔记
    ASP.Net Jquery 随机验证码 文本框判断
    html 随机验证码
    冒泡排序
    工厂方法模式[Factory Mothod]
    单例设计模式[Singleton]
    设计模式之SOLID原则
    linux下配置zookeeper
    linux中安装nginx
    linux安装tomcat
  • 原文地址:https://www.cnblogs.com/y4247464/p/13818324.html
Copyright © 2020-2023  润新知