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

    /*虚函数*/

    /***********************************************************************
    虚函数建立在继承情况下的
    虚函数:一个成员函数(不包括构造函数和静态成员函数)前面有virtual关键字
    虚函数好处: 可以用一致的(相同的)方法,在不同种情况,完成不一样的实现
    用同样的接口,完成不同的实现
    虚函数写法:
      1.
    在基类和派生类中,有同名的函数,参数一样,返回值一样。那么在基类中
       
    此函数前加上virtual关键字,派生类(virtual)可加可不加
      2.
    调用,必须使用基类的指针或则引用完成调用
    如何判断函数去哪里?
      pb->Fun();
     
    基类的指针调用函数FUN
        1
    如果FUN是非虚成员函数,那么执行 基类::FUN()
        2
    如果FUN是虚函数
          a.
    如果基类指针指向的是基类对象,执行基类::FUN()
          b.
    如果基类指针指向的是派生类对象,执行派生类::FUN()
    ***********************************************************************/


    #include "stdafx.h"
    #include <iostream.h>

    class A
    {
    public:
        virtual void Show()
        {
            cout << "A::Show()" << endl;
        }
    };

    class B : public A
    {
    public:
        virtual void Show()
        {
            cout << "B::Show()" << endl;
        }
    };

    void FunShow( A* pA )
    {
        pA->Show();
    }

    int main(int argc, char* argv[])

        B theB;
        A theA;
       
        A* pA = NULL;
       
        //
    如果FUN是虚函数
        pA = &theA;   
        //a.
    如果基类指针指向的是基类对象,执行基类::FUN()
        pA->Show();

        //
    如果FUN是虚函数
        pA = &theB;
        //b.
    如果基类指针指向的是派生类对象,执行派生类::FUN()
        pA->Show();
       
        //
    虽然没有数据成员,但大小都为4
        //
    因为virtual 其实就是一个函数指针数组的首地址
        //
    一个类中有几个虚函数,数组里边就有几个虚函数地址

        cout << "
    基类对象大小" << sizeof(A) << endl;
        cout << "
    派生对象大小" << sizeof(B) << endl;

       
        //
    基类的指针调用函数FUN pb->Fun();   
        //1
    如果FUN是非虚成员函数,那么执行 基类::FUN()
        //2
    如果FUN是虚函数       
        //a.
    如果基类指针指向的是基类对象,执行基类::FUN()
        //b.
    如果基类指针指向的是派生类对象,执行派生类::FUN()


        return 0;
    }

  • 相关阅读:
    iOS UIWebView中javascript与Objective-C交互、获取摄像头
    iOS UIWebView中javascript与Objective-C交互、获取摄像头
    android使用webview上传文件(支持相册和拍照)
    在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器
    Android 访问权限设置
    perl 登入人人网
    攻击排查脚本
    利用套打和分栏巧妙来做商品价签
    perl 自定义请求头
    获取响应头信息
  • 原文地址:https://www.cnblogs.com/w413133157/p/1657069.html
Copyright © 2011-2022 走看看