码迷,mamicode.com
首页 > 其他好文 > 详细

虚函数和函数重载的问题

时间:2018-07-26 23:31:40      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:参数   virtual   纯虚函数   void   str   运行   运算   初始   继承   

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

#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;
    }
};

class C
{
public:
    C() {}
    ~C() {}
    int f;
};

/*函数的重载*/
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(); C cc;//申请的空间里的值是随机值 cout<<cc.f<<endl; C *ccc=new C();//申请的空间里的值已经初始化 cout<<ccc->f<<endl; return 0; }

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

虚函数和函数重载的问题

标签:参数   virtual   纯虚函数   void   str   运行   运算   初始   继承   

原文地址:https://www.cnblogs.com/ybf-yyj/p/9374638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!