zoukankan      html  css  js  c++  java
  • 封装、继承和多态

    1、封装

         定义:将某些东西包装隐藏,让外界无法直接访问,只能通过某些特定的方式访问。

        目的:增强安全性,简化编程,使用者不用了解具体的实现细节,而只是通过外部接口以及特定的访问权限来使用类的成员。  

    2、继承

         定义:新类从已有类那里得到已有的特性;

    3、多态

        定义:一个接口的多种实现;

        动态多态:在程序运行时才能知道调用哪个函数,父类指针或者引用能够指向子类对象调用子类函数。

       非多态:

       C++在编译的时候要确定每个对象调用的函数,当son的地址赋给father,C++编译器会进行类型转换,C++编译器会认为father保存的就是father的地址。

    #include "pch.h"
    #include "string"
    #include <iostream>
    using namespace std;
    class Father
    {
    public:
        void face()
        {
            cout << "Father's face!" << endl;
        }
        void say()
        {
            cout << "Father say !" << endl;
        }
    };
    class Son :public Father
    {
        void face()
        {
            cout << "Son's face!" << endl;
        }
        void say()
        {
            cout << "Son say!" << endl;
        }
    };
    int main()
    {
        Son son;
        Father *father = &son;
        father->say();
    }

    输出结果:

       多态:将父类say()函数声明为virtual;

        编译器在编译时发现Father类有虚函数,此时编译器会为每个包含虚函数的类创建一个虚函数表(vtable),该表为一个一维数组用来存放虚函数的地址;同时编译器会为每个对象创建一个虚表指针(vptr),这个指针指向所属类的续表。

    #include "pch.h"
    #include "string"
    #include <iostream>
    using namespace std;
    class Father
    {
    public:
        void face()
        {
            cout << "Father's face!" << endl;
        }
        virtual void say()
        {
            cout << "Father say !" << endl;
        }
    };
    class Son :public Father
    {
        void face()
        {
            cout << "Son's face!" << endl;
        }
        void say()
        {
            cout << "Son say!" << endl;
        }
    };
    int main()
    {
        Son son;
        Father *father = &son;
        father->say();
    }

  • 相关阅读:
    读书笔记
    JavaScript
    Vue
    读书笔记
    Python
    Python
    概率论07 联合分布
    概率论06 连续分布
    概率论05 离散分布
    概率论04 随机变量
  • 原文地址:https://www.cnblogs.com/dingou/p/10274816.html
Copyright © 2011-2022 走看看