多态,虚函数,纯虚函数

多态虚函数纯虚函数详解 在面向对象编程(OOP)中,多态(Polymorphism)、虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)是三个非常重要的概念。它们使得代码更加灵活、可扩展,并且支持接口抽象。本文将详细介绍这些概念,并通过C++代码示例来展示它们的使用。 阅读详情

多态借助虚函数,基类指针既可以使用基类(父类)的成员函数,也可以使用派生类(子类)的成员函数,它有多种形态,或多种表现方式,这就是多态    简单说就是同一条语句可以执行不同的操作,看起来有不同表现方式,这就是多态。

构成多态的条件

多态存在的三个条件:
  • 必须存在继承关系;
  • 继承关系中必须有同名的虚函数,并且它们是覆盖关系(重载不行)。
  • 存在基类的指针,通过该指针调用虚函数。

注意:派生类(子类)中的虚函数必须覆盖(不是重载)基类(父类)中的虚函数,才能通过基类指针访问

1:创建类,定义虚函数            定义:  关键字:virtual 类型 名字(){}  虚函数对于多态具有决定性的作用,有虚函数才能构成多态

) virtual 关键字仅用于函数声明,如果函数是在类外定义,则不需要再加上virtual关键字。

所有派生类中具有覆盖关系的同名函数都将自动成为虚函数。

2: 虚函数作用:让每个类都可以覆盖这个方法的内容,非静态成员,具有继承性,不是重载声明而是覆盖,执行不同的函数,

通过指针指向或者引用 在C++中,虚函数的唯一用处就是构成多态。

3:创建类的两种方式:

动态创建:1:base *p=new base()

                   p->函数

                     2:  p1=new 子类名

                        p1->子类函数            可以在多个类中使用,重载只能在一个类中使用

和重载函数的 区别:虚函数不能被修改参数和返回类型,而且参数和返回类型一致,


②:纯虚函数的定义方式:virtual void showme(参数列表)=0;

纯虚函数没有函数体,只有函数声明,在虚函数声明结尾加上=0,表明此函数为纯虚函数。

最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。

默认为抽象类不允许创建对象,原因很明显,纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间。和类有本质的区别:

) 只有类中的虚函数才能被声明为纯虚成员函数,普通成员函数和顶层函数均不能声明为纯虚函数,定义了抽象函数,则这个类就会变成抽象类

共同特征:实现多态,

如何使用:声明为纯虚函数,在派生类中实现

#ifndef  __TEST_H_                 作用:声明函数的唯一性

#define  __TEST_H_  


简单的使用虚函数和纯虚函数:

//多态 虚函数,纯虚函数
<strong>#include<iostream>
using namespace std;


class std1{
public:
	virtual void my(){                    //虚函数
		cout<<"sanzhixiong"<<endl;
	}
	virtual void my1()=0;             //纯虚函数 创建纯虚函数时就会将这个类变成抽象类
};	
	
class std2:public std1{
public:
	void my(){
		cout<<"狗"<<endl;         //覆盖父类的虚函数,但是虚函数的结果不会改变,在main函数中依然可以使用
	}
	void my1(){
		cout<<"dashab8"<<endl;     //只能在派生类中使用纯虚函数,在main函数中调用
	}
};
	
int main(){
	std2 *p=new std2();                      //定义对象
	p->my();
	p->my1();
	//std1 *p1=new std1();                   std1中有纯虚函数 默认为抽象类,不允许创建对象
	//p1->my();
	system("pause");
	return 0;
}</strong>





C51单片机驱动ILI9341彩屏实战:从Proteus仿真到绘制自定义图案(附完整代码) 本文详细介绍了使用C51单片机驱动ILI9341彩屏的完整实战流程。内容涵盖硬件连接、8080并行接口时序模拟、寄存器初始化、屏幕方向设置以及基本图形绘制原理,并重点讲解了如何在Proteus仿真环境中搭建电路、调试代码,最终实现自定义图案的显示。文章提供了完整的代码示例,为嵌入式开发学习者和复古硬件爱好者提供了一套可行的解决方案。 阅读详情

相关推荐

【图像超分】论文精读:Enhanced Deep Residual Networks for Single Image Super-Resolution(EDSR和MDSR)

最近对超分辨率的研究随着深度卷积神经网络 (DCNN) 的发展取得了进展。特别是,残差学习技术表现出更好的性能。在本文中,我们开发了一个增强的深度超分辨率网络(EDSR),其性能超过了当前最先进的 SR 方法。我们模型的显着性能改进是由于通过删除传统残差网络中不必要的模块进行优化。当我们稳定训练过程时,通过扩展模型大小可以进一步提高性能。我们还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,该方法可以在单个模型中重建不同缩放因子的高分辨率图像。所提出的方法在基准数据集上比最先进的方法表现出更好的

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7859

虚函数纯虚函数多态

如果析构函数不被声明为虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样会造成派生类析构不完全,造成内存泄漏。由于我们只知道父类的类型,编译器无法确定指针指向的是哪个子类对象,因此只能调用父类的析构函数来释放资源。因为多态允许我们以统一的方式处理不同的派生类对象,并且在运行时确定要调用的方法。相反,它会在运行时根据对象的实际类型来选择正确的函数版本。这种机制允许多态性(Polymorphism)的实现,允许不同的派生类以不同的方式实现相同的虚拟函数。

Ricardo的博客 4481

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 110

C++入门】(纯)虚函数多态、抽象类、接口

(1)当基类含有1个或多个虚函数时,其析构函数需要声明为virtual虚函数;(2)将析构函数定义为虚函数,可以保证派生类析构时能调用正确的析构函数;(1)虚函数的作用是实现面向对象的多态效果,让成员函数在运行时动态解析和绑定具体的执行函数;(2)将成员函数定义为virtual虚函数是有额外开销的,因为要在运行时动态绑定;如果是普通函数,在编译时就可以确定并绑定完成;

weixin_42031299的博客 1923

c++多态实现的机制

什么是c++多态多态的意思是,当有基类和派生类的时候,在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的动态类型来调用相应的函数。如果对象的动态类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。 c++多态的实现: 实现依靠的是虚函数和动态绑定机制; 虚函数背后的原理 那么当我们将基类的一个函数声明为virtual时,在背后发生...

小白的逆袭 2793

多态性与虚函数,纯虚函数

多态”字面意思:多个形态或多种状态。在C++中,这意味着同一个操作或函数名可以根据所操作的对象类型有不同的行为,这可以大大减少代码的重复,提高代码的通用性,并提高程序的可维护性和可扩展性.同一类型不同诉求使用虚函数题目要求计算不同图形的面积,看似是不同的类型,实际上他们都有一个共同的诉求,即求图形的面积,想到了函数的多态性,使用虚函数来解决这个问题.

lanssssss的博客 549

多态(虚函数,虚函数表,纯虚函数,虚析构函数,抽象类)

目录 多态多态多态 虚函数 动态类型和静态类型 静态类型 动态类型(多态实现) 虚函数表(vtable) 定位虚函数 虚函数初始化时间 虚函数表的特点 虚函数应用 纯虚函数 纯虚函数声明方法 纯虚函数特点 虚析构函数 虚函数限制 抽象类(虚基类这个好像是这么叫还是叫纯虚基类来着,记不清了.不过这个不重要) 总结 多态 多态嘛,固然就是一个物体有多种形态,在C++中就是一个函数名,有多种功能. 函数重载一般叫静多态,接下来介绍的就是动多态. 静多态 在.

szplzx1314的博客 537

C++多态性、虚函数纯虚函数

多态多态性的概念 多态性是面向对象程序设计的重要特征之一,它与封装和继承一起构成面向对象程序设计的三大特征。 多态性是指当不同对象收到相同的消息时产生不同的动作。 多态性的形式 C++支持两种形式的多态性: 第一种是编译时多态,称为静态联编。是指程序在编译前确定的多态性,是通过重载机制来实现的包括:函数重载和运算符重载。 第二种是运行时多态,称为动态联编。是指必须在运行中才可以确定的多态性,是通过继承和虚函数来实现的。 虚函数 虚函数的定义 虚函数:在类的成员函数前加virtual关键字。

xp_fangfei的博客 1376

C++多态虚函数纯虚函数

多态:不同对象接收相同的消息产生不同的动作。多态包括编译时多态和运行时多态   运行时多态是:通过继承和虚函数来体现的。 编译时多态:运算符重载上。 封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。多态也有代码重用的功能,还有解决项目中紧耦合的问题,提高程序的可扩展性。C++实现多态的机制很简单,在继承体系下,将父类的某个函数...

yangxueyangxue的博客 969

11、虚函数多态纯虚函数

当编译器看到通过指针或引用调用虚函数的语句时,并不急于生成有关函数跳转的指令,相反编译器会用一段代码替代该语句,这段代码在运行时才能被执行,完成如下操作。如果子类的成员函数和基类的虚函数具有相同的函数签名,那么该成员函数就也是虚函数,无论其是否带有virtual关键字。调用虚函数的指针也可以是基类中的this指针,同样能满足多态的条件,但在构造和析构函数中除外。virtual 返回值 函数名(形参表) { …的成员函数,称为纯虚函数或抽象方法。形如class 类名{形如class 类名{

Salted fish in hand, I have the world. 966

C++虚函数纯虚函数(以及函数重写/重载,隐藏,多态

虚函数纯虚函数 定义 类中声明前带有virtual关键字的函数称为虚函数: class A { virtual void example(); } 类中申明格式如下的函数称为纯虚函数: class A { virtual void example() = 0; } 即在函数声明中含有virtual和= 0两个关键字。 区别 纯虚函数的特点: 只有声明,没有实现/定义 含有纯虚函数的类称为抽象类,抽象类不能被实例化 抽象类的派生类如果想成为具体的类(能够被实例化),则必须重写纯虚函数

weixin_41694059的博客 1万+

C++ 虚函数纯虚函数多态的核心实现基石

本文深入探讨了C++虚函数纯虚函数的核心概念及其在多态实现中的关键作用。主要内容包括: 虚函数:通过virtual关键字声明,实现运行时动态绑定,允许派生类重写基类函数。必须保持函数签名一致,建议使用override关键字显式声明。 纯虚函数:以"=0"结尾的无实现虚函数,使类成为抽象类,强制派生类实现所有纯虚函数。抽象类不能实例化,仅定义接口规范。 底层机制:详细解析了虚函数表(vtable)和虚函数指针(vptr)的工作原理,说明动态多态的底层实现原理。 虚析构函数:强调基类应声

今天比昨天更努力一点! 1万+

虚函数纯虚函数多态

虚函数:前面有virtual,在父类里面有定义,有实现。如: virtual void xuhanshu(){ cout<<"Im xuhanshu"<<endl } 纯虚函数:前面有virtual,在父类里面有定义,但是不实现。后面必须跟“=0”,如: virtual void chunxu()=0; 二者格式: 虚函数-- virtual xuhanshu(){ method body }; 纯虚函数--virtual chunxu()=0;...

Xueqian E的博客 556

C++虚函数纯虚函数以及多态

C++虚函数纯虚函数以及多态虚函数纯虚函数虚函数纯虚函数关于构造函数和析构函数   在整理排序算法的时候想到可以借此熟悉一下类的构造以及继承等知识点,就写了一个排序基类声明一个排序函数,然后写多个排序算法的子类重写这个排序函数,过程中顺便研究了一下virtual和多态的概念。 虚函数纯虚函数   首先回顾一下虚函数纯虚函数的八股文,虚函数多态的实现机制,声明一个虚函数就是在一个函数的声明(不需要定义)前加上virtual,而纯虚函数则还要函数声明后加上=0来表明纯虚函数身份,如果想要定义纯虚函数

DooDia的博客 581

c++虚函数多态 | 虚函数纯虚函数 | 多态的实现原理 | 虚析构函数

在上一篇文章中,我们介绍了c++中类与对象的继承,继承可以根据一个或多个类来定义一个新的类,减少代码量,使得开发和维护一个应用程序变得更加的容易。本文将介绍c++继承的重要应用 —— 多态

Ceylan__的博客 1652

C++多态 ⑪ ( 纯虚函数和抽象类 | 纯虚函数语法 | 抽象类和实现 | 代码示例 )

一、纯虚函数和抽象类 1、纯虚函数 2、纯虚函数语法 3、抽象类和实现 二、完整代码示例

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1971

【整理】多态虚函数纯虚函数

【整理】多态虚函数纯虚函数

qq_33310245的博客 419

多态虚函数纯虚函数的概念

首先,在了解什么是多态之前,要了解什么是虚函数虚函数对于多态具有决定性的作用,有虚函数才能构成多态。怎么样创建一个含有虚函数的类呢,其实就是函数类型前面加上关键字virtual,借助虚函数,基类指针既可以使用基类的成员函数,也可以使用派生类的成员函数,它有多种形态,或多种表现方式,这就是多态多态是面向对象的主要特征之一。在C++中,虚函数的唯一用处就是构成多态C++提供多态的目的是:

Cineze的博客 2486

C++虚函数多态纯虚函数多态的经典用法

此处为取得半径函数,只有圆形才有半径,方形是没有半径的,在这里基类Shape实现了getRadius()的虚函数,只不过Shape只是返回了0,因为基类不清楚怎么做,Circle子类重写了虚函数getRadius()的具体实现,如果用户输入1则创建Circle子类对象,因此在这里调用了Circle子类的重写函数,如果用户输入2则创建Square子类对象,Square子类没有重写基类虚函数getRadius(),因此在这里调用了基类Shape的虚函数getRadius()。

咸鱼爱幻想的博客 592

c++ 多态纯虚函数

1、多态性 1.1多态性是面向对象程序设计的关键技术之。若程序设计语言不支持多态性,不能称为面向对象的语言。利用多态性技术,可以调用同一个函数名的函数,实现完全不同的功能。 在C+ +中有中两种多态性: 编译时的多态 通过函数的重载和运算符的重载来实现的。 int Max(int a, int b) { return a > b ? a : b; } char Max(char a, char b) { return a > b ? a : b; } double Max(double

qq_46615150的博客 556

【⑦C++ | 多态虚函数 | 纯虚函数 | 虚析构 | 抽象类 | 多态探究

总结起来,虚函数纯虚函数、虚析构函数和抽象类是 C++ 中实现多态性的关键概念。它们允许在派生类中重写基类的函数,实现不同对象之间的多态行为。多态性提供了更灵活和可扩展的代码结构,增强了面向对象编程的能力。

热爱编程的小K的博客 1715
上一篇: 继承,重载函数,派生函数
下一篇: 动态内存的分配
laofengge
博客等级 码龄10年 9粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值