zoukankan      html  css  js  c++  java
  • 016 虚函数

    /*
    目录:
        一 概念
        二 简单对比
       三 简单对比 - 图形
    */

    一 概念

    /*
    
    // 虚函数    
        虚函数一定是重写函数,在基类重写函数前加virtual
        
        使用:
            1 类对象: 使用什么对象调用对应类的重写函数
            2 基类指针: 
                (1) 调用普通函数: 对应类函数 
                (2) 调用virtual函数: 指针指向的类
        
        原理: 
            1 对象首部多个指针,指针指向虚表        
            
        思想:
            抽象与实现
                基类: 概念、抽象
                派生类: 具体对象
            
            静态绑定和动态绑定
                静态: 编译时绑定,通过对象调用(对象类型)
                动态: 运行时绑定,通过地址调用(根据虚表)
                
    // 纯虚函数: 
            1 不能定义基类对象
            2 派生类必须有重写函数
            3 含纯虚函数的基类,叫做抽象类。纯虚函数也称为抽象函数。
    */

    二 简单对比

    #pragma once
    #include <iostream>
    
    using namespace std;
    
    class CBase
    {
    public:
        void RealFunc()
        {
            cout << "CBase::RealFunc()" << endl;
            m_i = 0x10;
        }
        virtual void VirtualFunc()
        {
            cout << "CBase::VirtualFunc()" << endl;
            m_i = 0x11;
        }
    
        int m_i;
    };
    
    
    class CDerived :public CBase
    {
    public:
        void RealFunc()
        {
            cout << "CDerived::RealFunc()" << endl;
            m_j = 0x20;
        }
        void VirtualFunc()
        {
            cout << "CDerived::VirtualFunc()" << endl;
            m_j = 0x22;
        }
    
    private:
        int m_j = 0x88;
    };
    
    
    int main()
    {
        CBase b;
        b.RealFunc();
        b.VirtualFunc();
        cout << sizeof(b) << endl;
    
        CDerived d;
        d.RealFunc();
        d.VirtualFunc();
        cout << sizeof(d) << endl;
    
        CBase *pb;
        pb = &b;
        pb->RealFunc();
        pb->VirtualFunc();
    
        pb = &d;
        pb->RealFunc();
        pb->VirtualFunc();
    
    
        return 0;
    }

    三 简单对比 - 图形

      压缩包: 链接

  • 相关阅读:
    Mysql 创建表
    oracle数据库 ORA-01017的解决办法
    用Html创建简历
    Mysql 基本的增删改查
    Linux 基本操作
    几乎百度
    测试第二天
    java map接口,可变参数,Collections集合工具类
    java set接口
    java List接口
  • 原文地址:https://www.cnblogs.com/huafan/p/11980699.html
Copyright © 2011-2022 走看看