专栏首页用户画像C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxq0816/article/details/82625408

1.虚函数(impure virtual)

  C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现

子类可以重写父类的虚函数实现子类的特殊化。

  如下就是一个父类中的虚函数:

class A
{
public:
    virtual void out2(string s)
    {
        cout<<"A(out2):"<<s<<endl;
    }
};

2.纯虚函数(pure virtual)

       C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。

  C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。

  C++中的纯虚函数也是一种“运行时多态”。

  如下面的类包含纯虚函数,就是“抽象类”:

class A
{
public:
    virtual void out1(string s)=0;
    virtual void out2(string s)
    {
        cout<<"A(out2):"<<s<<endl;
    }
};

3.普通函数(no-virtual)

普通函数是静态编译的,没有运行时多态,只会根据指针或引用的“字面值”类对象,调用自己的普通函数

  普通函数是父类为子类提供的“强制实现”。

  因此,在继承关系中,子类不应该重写父类的普通函数,因为函数的调用至于类对象的字面值有关。

4.程序综合实例

#include <iostream>
using namespace std;

class A
{
public:
    virtual void out1()=0;  ///由子类实现
    virtual ~A(){};
    virtual void out2() ///默认实现
    {
        cout<<"A(out2)"<<endl;
    }
    void out3() ///强制实现
    {
        cout<<"A(out3)"<<endl;
    }
};

class B:public A
{
public:
    virtual ~B(){};
    void out1()
    {
        cout<<"B(out1)"<<endl;
    }
    void out2()
    {
        cout<<"B(out2)"<<endl;
    }
    void out3()
    {
        cout<<"B(out3)"<<endl;
    }
};

int main()
{
    A *ab=new B;
    ab->out1();
    ab->out2();
    ab->out3();
    cout<<"************************"<<endl;
    B *bb=new B;
    bb->out1();
    bb->out2();
    bb->out3();

    delete ab;
    delete bb;
    return 0;
}

执行结果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2.2.2 物理层接口的特性

    物理层考虑的是如何在连接各个计算机的传输媒体上传输数据比特流,而不是具体的传输媒体。物理层应尽可能屏蔽各种物理设备的差异,使数据链路层只需考虑本层的协议和服务。...

    week
  • struts2解决jsp与jsp页面之间参数的传递

    week
  • java读取excel

    week
  • 网站优化有这几种方法,快速排上搜索引擎首页位置

    对于很多新兴网站的站长来讲关于网站优化的基础不是非常的了解。主要的原因是因为这个在搜索引擎优化中有着非常多的保密因素,一般是不让别人看到的。这也是网站优化公司赚...

    高级优化师
  • ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II

    二、ASP.NET Runtime Pipeline(续ASP.NET Http Runtime Pipeline - Part I) 现在我们真正进入ASP....

    蒋金楠
  • 网站SEO自然排名做上去了但没咨询电话是什么原因

    不少的公司网站在做SEO自然快照排名提升,有的公司网站做SEO做的自然快照排名上去了,结果却感到没有什么咨询电话,这是怎么回事呢?下面,就由美耐思来综合分析解答...

    天津做网站-美耐思
  • OD常用断点

    用户2135432
  • Matplotlib-hist-直方图(条形统计图)

    直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。...

    明天依旧可好
  • 看各路神仙如何大战MySQL insecure warning报警有感

    一、问题由来 mysql在5.6.5上开始在命令行中直接填入用户密码会提示错误,例如: $./mysql -h10.10.30.18 -uwoqutech -p...

    沃趣科技
  • c3p0配置之preferredTestQuery参数默认值探秘

    http://www.mchange.com/projects/c3p0/ c3p0的配置参数preferredTestQuery用于检测数据库连接测试,检测...

    2Simple

扫码关注云+社区

领取腾讯云代金券