zoukankan      html  css  js  c++  java
  • 虚函数和函数重载的问题

    虚函数是类的成员函数,虚函数体现了运行时的多态性,编译时的多态性由函数重载和运算符重载等体现
    虚函数和函数重载都体现了多态性,但他们的表现形式不一样,函数重载调用根据参数的个数、参数的类型进行区分,而虚函数则是根据动态联编(运行时的多态性)来确定的。

    #include <iostream>
    using namespace std;
    
    class A
    {
    public:
        int fun(int a){return a;}
        int fun(int a,int b){return a+b;}
        virtual float fun(float c){return c;}
        virtual void f()=0;//纯虚函数
    };
    
    class B:public A
    {
    public:
        int fun(int a)
        {
            return a+10;
        }
        int fun(int a,int b)
        {
            return a+b+10;
        }
        float fun(float c)
        {
            return c+10.0;
        }
        void f()
        {
            cout<<"子类不重写纯虚函数,父类不能实例化,且子类继承父类必须实例化纯虚函数"<<endl;
        }
    };
    
    /*函数的重载*/
    int fun(int a) { return a; } int fun(int a,int b) { return a+b; } float fun(float a) { return a; } int main() { int a=fun(1); int b=fun(1,2); float c=1.23; float d=fun(c); cout<<a<<' '<<b <<' '<<d<<endl; // A aa;拥有纯虚函数,不能初始化 A *aa=new B; cout<<aa->fun(1)<<' '<<aa->fun(1,2)<<' '<<aa->fun(float(1.23))<<endl; B *bb=new B; cout<<bb->fun(1)<<' '<<bb->fun(1,2)<<' '<<bb->fun(float(1.23))<<endl; aa->f(); bb->f();return 0; }

    输出:
    1 3 1.23
    1 3 11.23
    11 13 11.23
    子类不重写纯虚函数,父类不能实例化,且子类继承父类必须实例化纯虚函数
    子类不重写纯虚函数,父类不能实例化,且子类继承父类必须实例化纯虚函数

  • 相关阅读:
    js完成打印功能
    ajax的序列化表单提交
    SpringMVC学习记录
    拦截器学习记录
    SpringMVC的controller层的方法返回值
    Mybatis学习记录(3)
    Mybatis学习记录(2)
    Mybatis学习记录(1)
    02-操作系统必会问题
    01-“计算机网络”必会问题
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/9374638.html
Copyright © 2011-2022 走看看