zoukankan      html  css  js  c++  java
  • 继承和派生

    继承:定义新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。

    • 派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。
    • 派生类一经定义后,可以独立使用,不依赖于基类。
    • 派生类拥有基类的全部成员函数和成员变量,不论是private、protected、public。
    • 在派生类的各个成员函数中,不能访问基类中的private成员。

    派生类的写法

    Class 派生类名 : public 基类名

    {

     

    };

    派生类对象的体积,等于基类对象的体积,再加上派生类对象自己的成员变量的体积。在派生类对象中,包含着基类对象,而且基类对象的存储位置位于派生类对象新增的成员变量之前。

    public继承的赋值兼容规则

    1.派生类的对象可以赋值给基类对象,实质是成员变量的赋值。

    2.派生类对象可以初始化基类引用

    Base & br=d;

    3.派生类对象的地址可以赋值给基类指针

    Base *pb= &d;

    Private 和protected以上不成立。

    直接基类与间接基类

    • 在声明派生类时,只需要列出它的直接基类
    • 派生类沿着类的层次自动向上继承它的间接基类
    • 派生类的成员包括
      • 派生类自己定义的成员
      • 直接基类中的所有成员
      • 所有间接基类的全部成员

     

    继承关系和复合关系

    继承:“是”关系

    • 基类A,B是基类A的派生类
    • 逻辑上要求:“一个B对象也是一个A对象”。

    复合:“有”关系

    • 类C中“有”成员变量K,K是类D的对象,则C和D是复合关系
    • 逻辑上要求:“D对象是C对象的固有属性或组成部分”。

     

     

    派生类中成员与基类同名,可以通过作用域限定符区别。

    访问范围说明:

    基类的private成员:

    • 基类的成员函数
    • 基类的友元函数

    基类的public成员:都可以访问

    基类的protected成员:

    • 基类的成员函数
    • 基类的友元函数
    • 派生类的成员函数可以访问当前对象的基类的保护成员。

    测试代码如下:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Student
    {
    private:
        string name;
        int age;
    public:
        Student(string na, int a) :name(na), age(a) {};
        void printIfo()
        {
            cout << name<<",";
            cout << age<<endl;
        }
    };
    class graduteStudent : public Student
    {
    private:
        bool graduate;
    public:
        graduteStudent(string name, int age) :Student(name, age) {};
        void printIfo()
        {
            Student::printIfo();
            cout << graduate << endl;
        }
        void SetInfor()
        {
            graduate = true;
        }
    };
    int main()
    {
        Student s1("chen", 20);
        graduteStudent s2("Sonny",21);
        s2.SetInfor();
        s1.printIfo();
        s2.printIfo();
        s2.Student::printIfo();
        return 0;
    }

     参考链接:

    https://www.coursera.org/learn/cpp-chengxu-sheji

  • 相关阅读:
    HTTP-接触
    什么是虚拟机-粗略学习
    jQuery中的动画理论干货
    jQuery-中的事件
    熟悉又陌生的快捷方式
    jQuery中的DOM操作
    jQuery与javascript库
    jQuery-选择器(2)
    jest操作 Elasticsearch
    配置 Kibana
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5655277.html
Copyright © 2011-2022 走看看