虚函数和纯虚函数的区别,再不学就被卷没了

简介: 虚函数和纯虚函数的区别,再不学就被卷没了

🎈虚函数(impure virtual)

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

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

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

class A
{
public:
     virtual void ss()
    {
        cout<<"我是基类的虚函数"<<endl;
    }
};

🎈纯虚函数(pure virtual)

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

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

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

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

class A
{
public:
    virtual void out1(string s)=0;  //我是基类的虚函数 
};

🎈举个栗子

#include<iostream>
#include<string>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
class a
{
  private:
  public:
    a(){      //构造函数用内联函数的形式 
    }
    //虚函数 
    virtual  void  xhs(){        //这个虚函数必须得在基类中实现 
      cout<<"我是基类的虚函数"<<endl;//即使是空的虚函数也要在基类中实现 
    }  //派生类中可以不写这个函数,但是派生类对象调用时会调用积累的虚函数 
    //纯虚函数 
    virtual void cxhs() =0;  //这个纯虚函数不在基类中实现,必须在子类中实现 
}; 
class b:public a
{
  private:
    public:
      void xhs(){         //这个是可有可无的 
        cout<<"我是派生类覆盖基类虚函数的函数"<<endl; 
    }                        //*
                             //*
    void cxhs(){         //这个是必须有实现的 
      cout<<"我是派生类覆盖基类虚函数的函数"<<endl; 
    }       //*              //*
};        //*        //*
int main()      //*              //*
{               //*              //*
  b c;        //*              //* 
  c.xhs();    //*           //调用派生类的 
  c.cxhs();//调用派生类的 
}
相关文章
|
Python
【Python】已解决:AttributeError: module ‘sys’ has no attribute ‘setdefaultencoding’
【Python】已解决:AttributeError: module ‘sys’ has no attribute ‘setdefaultencoding’
537 0
|
11月前
|
API 开发者 索引
Python中的省略号(Ellipsis)赋值方式
在Python中,省略号(`...`)是一种特殊对象,称为Ellipsis,虽不常用但在特定场景下非常实用,如函数占位、未实现方法示例及NumPy数组处理。本文通过示例介绍`a = ...`的用法。省略号类似于`None`,可用作代码结构的占位符,保持代码完整性和可读性,同时在API设计中标识待实现的方法。特别是在NumPy中,省略号用于表示多维数组的剩余维度,简化数组操作,提高代码灵活性和可读性。掌握这一技巧有助于提升Python编程能力。
306 1
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `&lt;rest&gt;` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
161 0
|
Linux 网络安全
suse 12 升级 OpenSSH-7.2p2 到 OpenSSH-8.4p1
suse 12 升级 OpenSSH-7.2p2 到 OpenSSH-8.4p1
399 0
在Linux中,如何设置系统的日期和时间?
在Linux中,如何设置系统的日期和时间?
|
算法 C++ Python
map的使用(C++)
map的使用(C++)
201 0
|
网络协议 网络安全 API
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
1229 1
|
Serverless C语言
【C语言】va_list(可变参数处理)
【C语言】va_list(可变参数处理)
330 0
|
开发框架 JavaScript 前端开发
技术经验解读:【转】ID,ClientID和UniqueID
技术经验解读:【转】ID,ClientID和UniqueID
|
移动开发 前端开发 JavaScript
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿