cpp虚函数,基类命名指向子类实例必备佳选

【C/C++学习笔记】 虚析构函数,虚基类,虚函数,纯虚函数 C++ 虚析构函数,虚基类,虚函数,纯虚函数1. 虚析构函数2. 虚函数虚函数表虚函数联系到多态,多态联系到继承。虚函数的作用3. 纯虚函数4.虚函数与纯虚函数的区别5. 虚基类 1. 虚析构函数 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 (1)当父类的析构函数没有定义为虚析构函数时,对象销毁时只调用了父类的析构函数,而没有调用派生子类的析构函数,会造成子... 阅读详情

简单虚函数

//============================================================================
// Name        : p1022VirtualDeconstructor.cpp
// Author      : perfey
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;

class Base
{
public:
	Base(){cout << "Conctructing Base!"<<endl;}

	virtual ~Base(){cout << "Deconstructing Base!"<<endl;}//多一个空格,virtual和~之间
};

class Derive: public Base
{
public:
	  Derive(){cout << "Constructing Derive!"<<endl;}
      ~ Derive(){cout << "Deconstructing Derive!"<<endl;}
     /*
      * 若是不加virtual,只输出构建base, Derive, 解构Base 三步,没有解构 derive? 这个有问题了
      *
      * */
};


int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

	Base *bptr = new Derive(); //父类指针指向之类实例;
	delete bptr;

	return 0;
}

结果

Conctructing Base!
Constructing Derive!
Deconstructing Derive!
Deconstructing Base!

(如果没有 tilde~前面那个virtual修饰,那么不会有Deconstructing Derive!这一句)

继续传递,继承下去

//============================================================================
// Name        : p1022VirtualDeconstructor.cpp
// Author      : perfey
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;

class Base
{
public:
	Base(){cout << "Conctructing Base!"<<endl;}

	virtual ~Base(){cout << "Deconstructing Base!"<<endl;}//多一个空格,virtual和~之间
};

class Derive: public Base
{
public:
	  Derive(){cout << "Constructing Derive!"<<endl;}
      ~ Derive(){cout << "Deconstructing Derive!"<<endl;}
     /*
      * 若是不加virtual,只输出构建base, Derive, 解构Base 三步,没有解构 derive? 这个有问题了
      *
      * */
};

class Derive2: public Derive
{
public:
	  Derive2(){cout << "Constructing DeriveSon!"<<endl;}
      ~ Derive2(){cout << "Deconstructing DeriveSon!"<<endl;}
     /*
      * 若是不加virtual,只输出构建base, Derive, 解构Base 三步,没有解构 derive? 这个有问题了
      *
      * */
};


int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

	Base *bptr = new Derive2(); //父类指针指向之类实例;
	delete bptr;

	return 0;
}

结果

!!!Hello World!!!
Conctructing Base!
Constructing Derive!
Constructing DeriveSon!
Deconstructing DeriveSon!
Deconstructing Derive!
Deconstructing Base!

可以看到每一个子类都继承虚函数,都调用了Deconstructor这是预期的效果。

继续花样

//============================================================================
// Name        : p1022VirtualDeconstructor.cpp
// Author      : perfey
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;

class Base
{
public:
	Base(){cout << "Conctructing Base!"<<endl;}

	virtual ~Base(){cout << "Deconstructing Base!"<<endl;}//多一个空格,virtual和~之间

    virtual void Eat() = 0; //纯需函数,无需在基类中实现,奇怪吧,类似interface中概念
};

class Derive: public Base
{
public:
	  Derive(){cout << "Constructing Derive!"<<endl;}

       void Eat()override
    		  {
    	  cout <<" 我吃生肉,茹毛饮血!!"<<endl;
              }

      ~ Derive(){cout << "Deconstructing Derive!"<<endl;}
};

/*
 * 若是不加virtual,只输出构建base, Derive, 解构Base 三步,没有解构 derive? 这个有问题了
 *
 * */

class Derive2: public Derive
{
public:
	  Derive2(){cout << "Constructing DeriveSon!"<<endl;}
      ~ Derive2(){cout << "Deconstructing DeriveSon!"<<endl;}
     void Eat() {
    	  cout <<" 我今晚大口吃肉!"<<endl;
      }
};


int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

	Base *bptr = new Derive(); //父类指针指向之类实例;
	bptr->Eat();
	bptr = new Derive2();
	bptr->Eat();

	delete bptr;

	return 0;
}

纯虚函数来结果

!!!Hello World!!!
Conctructing Base!
Constructing Derive!
我吃生肉,茹毛饮血!!
Conctructing Base!
Constructing Derive!
Constructing DeriveSon!
我今晚大口吃肉!
Deconstructing DeriveSon!
Deconstructing Derive!
Deconstructing Base!

C++多继承中重写不同基类中相同原型的虚函数 本文针对C++多继承中同名虚函数重写问题提出解决方案。当派生类需要分别实现不同基类的同名虚函数时,通过引入中间类进行转发:保持原始基类不变;创建中间类重命名虚函数并建立转发机制;最终派生类分别实现重命名后的函数。该方法无需修改原有基类,保持类型安全和多态特性,适用于第三方库或稳定代码的扩展。通过中间类的转发机制,实现了不同基类同名虚函数的独立实现,解决了多继承中的接口冲突问题,特别适合大型项目或使用第三方库的场景。 阅读详情

相关推荐

C/C++ 虚函数与多态(含vector用法) 及获取文件内容、打印字符串实例

before|正文之前: c++实验代码及学习笔记(十) 你好! 这是一个高程实验课的代码记录及学习笔记。我将记录一些重要的知识点、易错点。但是作为大学生,水平很低,敬请指点教导、优化代码。 1问题 题目比较难懂,首先我们从实验目的得知,主要运用虚函数与运行时多态的知识。 我们需要实现的是从文件读取字符串,且一个函数(调用不同类指针)可以实现不同功能。 第一,我们已经从以前的实验中习得,如何...

duoluka的博客 2019

Cpp || 继承

学习继承的基础知识

Template Code 591

java命名规范 一些详细

java命名规范 一些规则java命名规范 一些规则java命名规范 一些规则java命名规范 一些规则

c++命名规范

 在引入细节之前,先说明一下命名规范的整体原则:同一性在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的同一性。 标识符组成标识符采用英文单词或其组合,应当直观且可以拼读,可望文知意,用词应当准确。最小化长度 && 最大化信息量原则在保持

1070

YOLOv8实战:如何用Focaler-IoU提升小目标检测精度(附代码)

本文详细介绍了如何通过Focaler-IoU提升YOLOv8在小目标检测中的精度,包括核心机制解析、代码实现及调优策略。Focaler-IoU通过动态聚焦机制有效解决传统IoU对小目标检测的不足,显著提升模型性能。附有完整的代码示例和实战指南,适合计算机视觉开发者参考。

weixin_29044157的博客 362

局域网ip冲突检测工具_python 小工具实现 windows笔记本与 ipad数据互传

宅在家没事的时候就开始琢磨ipad的进阶使用,由于没有mac无法隔空投送,ipad与windows的数据交互表现极差,所以设计了这个ftp小工具。当然,这个工具不仅仅能用于windows与ipad,还可以用于局域网任意两台设备之间程序源码与下载见文章末尾使用说明windows端:biubiubiu.exeipad端: appsotre下载 FE文件管理器windows端操作在c盘下创建ftp目录...

weixin_39866265的博客 4436

JAVA基基基本命名方式(初学者必看)

Java基本命名规则与规约 规则:规则是由java语言规定,是必须强制性遵守的 其实也很简答: java语言可以由字母、数字、中文构成,其实也可以由符号构成 字母(大小写敏感) 数字(0-9不允许开头) 符号(英文符号 _ $) 但是中文一般不推荐 规约:由开发人员一点一点积累,形成的命名方式 对于初学者,规约对程序代码的执行没有丝毫的影响,但是当在后期程序的开发与团队的合作中,命名的规约性就很明显的体现出来了,作为开发人员就要强制性遵守的,这些命名规约也是极其具有科学性的。 类名字 首字母大写 如果两个

古城的博客 469

Android Profiler 帧率优化实战与性能调优

本文详细介绍了使用Android Profiler进行帧率优化与性能调优的实战方法。通过分析主线程状态、FPS曲线和渲染阶段耗时,精准定位卡顿根源,并提供减少过度绘制、优化绘制命令及改善资源使用的具体策略。文章结合电商、游戏等真实案例,帮助开发者有效解决卡顿问题,提升应用流畅度。

palm99的专栏 536

常用基类名称空间

使用using 关键字,使用时可省略名称空间 System 基元数据类型的根 System.Collections 集合 System.ComponentModel 组件 System.Data 数据库访问和操作 System.Data.Common 提供程序共享 System.Drawing GDI+ System.IO 文件系统输...

weixin_30505043的博客 316

【OpenClaw从入门到精通】第20篇:OpenClaw实战—从零搭建教育自动化助教系统(作业批改+智能答疑+学情分析)【2026实测】

本文基于OpenClaw开源框架,聚焦教育行业“答疑重复、批改耗时、学情模糊”三大核心痛点,提供从环境部署到功能落地的全流程实操方案。通过整合QQ群交互、代码分析、数据可视化等技能,构建“智能答疑+作业批改+学情分析”的自动化助教系统。系统支持7×24小时群聊答疑、多语言作业自动评审、学情数据周报生成,经实测可使助教工作时间减少60%、作业批改效率提升5-10倍、学情问题识别提前5周。文中包含完整配置步骤、可直接运行的代码示例及避坑指南,兼顾新手入门与进阶实操,帮助教育工作者快速落地自动化工具,从重复劳动中

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1451

手把手教你学SOC芯片架构--NoC(片上网络,Network on Chip)全方位解析

​、​。

MHD0815的博客 865

JAVA类常见命名约定

JAVA类常见命名约定

qq_41851943的博客 1171

国科大学习资料--模式识别与机器学习(黄庆明)--期末复习题2(含答案)

国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) ...

无名何许人的博客 1万+

c++中的虚特性(虚基类、虚函数、纯虚函数)

1. 虚基类 1.1 虚基类作用 为了解决多继承时的命名冲突和冗余数据问题,使得派生类中只保留一份间接基类的成员。 其本质是是让某个类做出声明,承诺愿意共享它的基类。其中,这个被共享的基类就称为虚基类(Virtual Base Class) 换个角度讲,虚派生只影响从指定了虚基类的派生类中进一步派生出来的类,它不会影响派生类本身。 建立对象时所指定的类称为最远派生类。 虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。 在整个继承结构中,直接或间接继承虚基类的所有派生

zack_liu的博客 5954

Spring Boot 集成 Spring AI:实现可被大模型调用的 MCP Server

本文介绍了如何利用Spring AI框架构建MCP Server,使大模型能够调用业务系统的接口。主要内容包括:1)MCP协议简介,分为MCP Server和Client两部分;2)环境配置要求,需Java 17+和Spring Boot 3.5.0+;3)实现步骤,通过@McpTool注解将Service方法暴露给大模型调用;4)使用Cherry Studio作为MCP Client测试效果,成功实现订单查询和下单功能。本文仅实现MCP Server部分,后续将介绍如何开发MCP Client。

iioSnail的博客 2129

基于深度确定性策略梯度的永磁同步电机强化学习控制方法

本文提出了一种基于深度确定性策略梯度(DDPG)的永磁同步电机(PMSM)电流内环智能控制方法。首先建立了PMSM在d-q坐标系下的数学模型,分析了传统矢量控制双闭环系统中PI控制器的局限性。针对电流内环控制问题,设计了包含电流跟踪误差、转速信息和历史控制量的状态空间,将电压输出作为动作空间,并构建了兼顾跟踪精度和响应速度的奖励函数。通过DDPG算法训练智能体,使其能够自适应调整控制策略。仿真结果表明,与固定参数的PI控制器相比,DDPG控制器在动态响应速度和抗干扰能力方面具有明显优势,为PMSM高性能控制

huanghm88的专栏 104

[C++] - 纯虚函数 & 抽象基类 & 接口类

翻译自:https://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ 1.纯虚函数和抽象基类 C++允许我们创建一种特别的虚函数:纯虚函数(pure virtual function)(或者叫抽象函数abstract functio...

浮生的博客 718

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【C++ 虚函数、纯虚函数、接口的实用方法和意义】

虚函数:允许在运行时决定调用哪个函数,实现多态性。纯虚函数:定义抽象基类,确保派生类实现特定功能,防止基类实例化。接口:通过抽象基类模拟,定义一组纯虚函数,实现多重继承和模块化设计。这些特性使得C++能够编写出灵活、可扩展和可维护的面向对象程序。

qq_36047182的博客 1101

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

虚函数与虚基类

1.虚函数是用于多态中virtual修饰父类函数,确保父类指针调用子类对象时,运行子类函数的。 2.纯虚函数是用来定义接口的,也就是基类中定义一个纯虚函数,基类不用实现,让子类来实现。 3.虚基类是用来在多继承中,如果父类继承自同一个父类,就只实例化一个父类(说的有点绕,就是只实例化一个爷爷的意思=。=)。 为了记住以上区别,首先,需要明白为什么要引入虚函数,虚函数的作用是什么,有什

chocolate的博客 2517

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++——继承、权限对类的影响、基类构造函数、虚函数与菱形继承和多重继承

继承是面向对象编程(OOP)中的一个核心概念,特别是在C++中。它允许一个类(称为派生类或子类)继承另一个类(称为基类或父类)的属性和方法。继承的主要目的是实现代码重用,以及建立一种类型之间的层次关系。1.:子类继承了父类的属性和方法,减少了代码的重复编写。2.:子类可以扩展父类的功能,添加新的属性和方法,或者重写(覆盖)现有的方法(属性不能被重写或覆盖)。3.:通过继承和虚函数,C++支持多态,允许在运行时决定调用哪个函数。编程示例。

weixin_61226442的博客 1008

【C++入门到精通】C++入门 —— 多态(抽象类和虚函数的魅力)

多态性是面向对象编程中的一个重要概念,它通过虚函数和动态绑定实现了统一处理不同类型对象的能力,提高了代码的灵活性和可扩展性。多态性的核心思想是将关注点放在接口和行为上,隐藏对象的具体实现细节,提供一致的接口供外部使用。

Yawesh的博客 1630

【C++】如何巧妙运用C++命名空间:初学者必备指南

本篇将带领大家走进C++的旅途,为了更好地学习C++这门语言,我们需要了解它的前世今生。在了解完C++如何诞生后,将开始我们C++之旅第一站"命名空间"。(老早说是C/C++博主,现在才更C++,哈哈哈哈哈~)

专注于 C/C++ 后端开发,涵盖基础语法、Linux系统与网络、MySQL数据库、常见算法及项目经验。 2838

C++命名空间及类的多态与(纯)虚函数,静态链接/动态链接

一、 命名空间 1. 形象表示:有两个人名字相同,但是属于不同的公司,如何辨别?这就需要声明是哪个公司的人了。 关键词: namespace 案列:#include "stdio.h" #include "iostream" using namespace std;namespace A { int a; int b; void fun(int a, int b) {

阅微草堂的博客 1045

C++Cherno 学习笔记day7 [27]-[30] C++继承、虚函数、接口(纯虚函数)和可见性

(Standard Namespace)的标识符,所有 C++ 标准库提供的功能(如容器、算法、字符串处理等)都封装在这个命名空间中。虚函数引用了一种Dynamic Dispatch(动态联编),通常通过v表(虚函数表)来实现编译。v表,包含基类中所有虚函数的映射,保证在运行时,映射到正确的覆写override函数。允许我们从那个基类中分离出来,从最初的父类中创建子类。通常声明函数时,我们的方法通常在类内部起作用,创建一个子类,它将包含你的父类所包含的一切。继承允许有一个相互关联的类的层次结构。

Shirleyyy1的博客 562

重定义不同基类的同名虚函数

http://ilewen.com/questions/6423   重定义不同基类的同名虚函数   class I { public: virtual void foo() = 0; }; class J { public: virtual void foo() = 0; }; class C : public I, public J {

tiewen的专栏 2180

编程语言_C++_入门系列笔记_基类派生类虚函数

C++学习笔记 1、基类和派生类:相当于JAVA里边的父类和之类 2、虚函数: A C++中的虚函数的作用主要是实现了多态的机制 B 用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。 C 这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。 D 所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编...

weixin_40452895的博客 222
上一篇: Python sympy做代数运算、解Cholesky求逆的L和L逆矩阵示例
下一篇: PAR 相控阵方法,阵元间隔原理
飞凡可期
博客等级 码龄11年 34粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值