返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中纯虚函数的实例详解
  • 156
分享到

C++中纯虚函数的实例详解

2024-04-02 19:04:59 156人浏览 薄情痞子
摘要

目录虚函数和纯虚函数附:纯虚函数的应用总结虚函数和纯虚函数 之前学过虚函数,语法:virtual 返回值类型 函数名(参数列表),然后这个类也就变成的虚基类,然后子类重写父类的虚函数

虚函数和纯虚函数

之前学过虚函数,语法:virtual 返回值类型 函数名(参数列表),然后这个类也就变成的虚基类,然后子类重写父类的虚函数。

纯虚函数,语法:virtual 返回值类型 函数名(参数列表)=0,当类中有了纯虚函数,这个类也称为抽象类。抽象类特点:无法实例化对象,子类必须重写抽象类中的纯虚函数,否则也属于抽象类。

class Base
{
public:
    virtual void Examp() = 0;//纯虚函数
    ~Base()
    {
        cout << "父类的析构函数" << endl;
    }
};
 
class Son:public Base
{
public:
    void Examp()
    {
        cout << "重写了父类的纯虚函数" << endl;
    }
    
    ~Son()
    {
        cout << "子类的析构函数" << endl;
    }
};
 
int main()
{
    Son p1;
    p1.Examp();
    system("pause");
}

上面是最简单的纯虚函数代码,子类必须得重写重写抽象类中的纯虚函数,不然不能实例化对象。

接下来我们如果利用子类对象开辟堆区,那么会带来父类指针释放子类对象时不干净的问题,即子类的析构函数不能够正常的被调用,会带来内存泄漏的问题:

int main()
{
    Son *p1=new Son;//子类对象开辟堆区
    p1->Examp();
    delete p1;//释放堆区,自动调用析构函数
    system("pause");
}

为了解决这个问题,可以利用虚析构和纯虚析构,也很简单,直接在父类的析构函数前面加上virtual关键字就成为了虚析构函数,这个类也会成为抽象类。

class Base
{
public:
    virtual void Examp() = 0;//纯虚函数
    virtual ~Base()//虚析构
    {
        cout << "父类的析构函数" << endl;
    }
};

或者是利用纯虚析构

class Base
{
public:
    virtual void Examp() = 0;//纯虚函数
 
    virtual ~Base() = 0;//类内声明
};
 
Base::~Base()//类外实现
{
        cout << "父类的析构函数" << endl;
}

附:纯虚函数的应用

包含纯虚函数的类叫抽象类,它不能生成对象,用户不能创建类的实例,只能创建派生类的实例。

注明:纯虚函数必须在继承类中重新声明函数(去掉后面的0,否则该派生类也不能实例化)。就是基类告诉子类,“你必须提供一个纯虚函数的实现,但我不知道你会怎样实现它。”

代码实现:

include<stdio.h>
#include<iOStream>
using namespace std;
class Base
{
public:
        virtual void func()=0;  //在基类中声明纯虚函数
};
class Derived:public Base
{
public:
        void func()         //在子类中重写纯虚函数
        {
                cout<<"哈哈"<<endl;
        }
};
int main()
{
        Base *b=new Derived();      //基类的指针调用子类重写的纯虚函数
        b->func();
        return 0;
}

总结

虚析构或纯虚析构就是用来解决通过父类指针释放子类对象

如果子类中没有堆区数据,可以不写为虚析构或纯虚析构

到此这篇关于c++中纯虚函数的文章就介绍到这了,更多相关C++纯虚函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++中纯虚函数的实例详解

本文链接: https://lsjlt.com/news/151192.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++中纯虚函数的实例详解
    目录虚函数和纯虚函数附:纯虚函数的应用总结虚函数和纯虚函数 之前学过虚函数,语法:virtual 返回值类型 函数名(参数列表),然后这个类也就变成的虚基类,然后子类重写父类的虚函数...
    99+
    2024-04-02
  • C++ 纯虚函数详解
    目录虚函数 纯虚函数总结虚函数  在基类中将一个函数声明为虚函数,使该函数具有虚属性,那么其所有派生函数中该函数的重写都具备了虚属性,也就使得基类指针可以调用派生...
    99+
    2024-04-02
  • C++ 虚函数与纯虚函数代码详解
    目录什么是虚函数:虚函数的注意事项:存虚函数总结什么是虚函数: 虚函数 是在基类中使用关键字 virtual 声明的函数,在C++ 语言中虚函数可以继承,当一个成员函数被声明为虚函数...
    99+
    2024-04-02
  • C++中虚函数与纯虚函数的区别有哪些
    小编给大家分享一下C++中虚函数与纯虚函数的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是虚函数:虚函数 是在基类中使用关键字 virtual 声...
    99+
    2023-06-20
  • C++ 虚函数与纯虚函数的使用与区别
    目录什么是虚函数:虚函数的注意事项:纯虚函数纯虚函数的注意事项:虚函数与纯虚函数区别什么是虚函数: 虚函数 是在基类中使用关键字 virtual 声明的函数,在C++ 语言中虚函数...
    99+
    2024-04-02
  • C++ 虚函数及虚函数表详解
    多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定。 #include <iostream> using ...
    99+
    2024-04-02
  • c++虚函数和纯函数的区别是什么
    C++中的虚函数和纯虚函数都是用来实现多态性的机制,但它们有一些不同之处。 虚函数是在基类中声明的,可以在派生类中进行重写,它允许在...
    99+
    2023-10-26
    c++
  • 详解C++虚函数中多态性的实现原理
    目录什么是虚函数多态性的实现多态的底层原理多态性的好处总结在面向对象的编程中,多态性是一个非常重要的概念。多态性意味着在不同的上下文中使用同一对象时,可以产生不同的行为。C++是一种...
    99+
    2023-05-19
    C++虚函数的多态性原理 C++虚函数 多态性 C++虚函数
  • C++ typeid 和虚函数详解
    目录typeid 和虚函数总结typeid 和虚函数 前面咱们讲到 typeid 的操作返回值是 type_info 对象的引用,然后输出返回值的地址是相同的,测试代码如下: #...
    99+
    2024-04-02
  • 怎么实现C++虚函数表中的虚函数
    这篇文章主要介绍“怎么实现C++虚函数表中的虚函数”,在日常操作中,相信很多人在怎么实现C++虚函数表中的虚函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么实现C++虚函数表中的虚函数”的疑惑有所帮助!...
    99+
    2023-06-17
  • C/C++中虚函数详解及其作用介绍
    目录概述使用方法关联静态关联动态关联案例1未使用虚函数使用虚拟类案例2总结概述 虚函数 (virtual function) 指可以被子类继承和覆盖的函数. 使用方法 基类声明成员...
    99+
    2024-04-02
  • Java 中synchronize函数的实例详解
    Java 中synchronize函数的实例详解java中的一个类的成员函数若用synchronized来修饰,则对应同一个对象,多个线程像调用这个对象的这个同步函数时必须等到上一个线程调用完才能由下一个线程调用。那么如果一个类同时有两个成...
    99+
    2023-05-31
    java synchronize ava
  • Python中的random函数实例详解
    Python中的random函数 random模块提供生成伪随机数的函数,在使用时需要导入random模块 1. random.random()最基本的随机函数,返回一个[0.0,1...
    99+
    2023-02-22
    Python random函数 Python中的 random
  • C++实例代码详解友元函数
    目录友元概述普通全局函数作为类的友元类的某个成员函数作为另一个类的友元一个类整体作为另一个类的友元友元的注意事项封装电视机 和遥控器的类友元函数 可以直接操作类的私有数据。 frie...
    99+
    2024-04-02
  • C# Random类随机函数实例详解
    目录引言一、创建界面二、效果展示三、Random类方法四、代码逻辑总结:引言 Random类是非常值得学习的一个类,所以我们今天一起学习一下Random这个类,对于模拟数据这个是随机...
    99+
    2024-04-02
  • C++ 函数调试详解:如何调试虚函数中的问题?
    虚函数调试方法:设置断点单步执行;使用 assert() 验证条件;利用调试器工具检查动态类型、函数栈和重新定义虚函数。 C++ 函数调试详解:如何调试虚函数中的问题? 引言 在 C+...
    99+
    2024-05-02
    c++ 虚函数 函数调试
  • C#实现虚拟键盘的实例详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { private HookEx.UserActivityHo...
    99+
    2022-12-16
    C#实现虚拟键盘 C#虚拟键盘 C# 键盘
  • C++ WideCharToMultiByte()函数案例详解
    函数WideCharToMultiByte() 详解 函数原型: int WideCharToMultiByte( UINT CodePage, DWORD dwFla...
    99+
    2024-04-02
  • C# Directory.GetFiles()函数案例详解
    C#中Directory.GetFiles() 函数的使用 C#中Directory.GetFiles(string path , string searchPattern, Sea...
    99+
    2024-04-02
  • C++ move()函数案例详解
    要了解move函数首先弄清左值引用和右值引用。 左值、左值引用、右值、右值引用 1、左值和右值的概念         左值是可以放在赋值号左边...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作