虚函数在类继承中的用法

搭建微信机器人的方案都在这了! 功能超级强大,虽不支持二次开发,但已有的功能足够个人使用,可惜官方作品已被腾讯告死,好在市面上还流落着不少破解版,有需要的自行搜索。可惜的是,微信官方已不准许新的微信号再使用 web 登录,这就直接从源头扼杀了 web 协议的微信机器人,虽说老的微信号还是能凑合着用,不过部分功能也受限。所以,这些都属于 PC 端的微信机器人。无论是 PC 端还是手机端,用 hook 方式实现的最大缺点就是要和某一个版本的微信客户端进行绑定,如果框架本身不对最新版本的微信适配,那使用的时候就无法升级到最新版本的微信。 阅读详情
// TestConsole.cpp : 定义控制台应用程序的入口点。
//

#include <iostream>
using namespace std;

//class A
class A
{
public:
	A()
	{
		cout<<"A Constructed"<<endl;
	}
	virtual ~A()
	{
		cout<<"A Destructed"<<endl;
	}

	void fun()
	{
		cout<<"A fun called"<<endl;
	}

	virtual void virtual_fun()
	{
		cout<<"A virture fun called"<<endl;
	}
};


//class B
class B: public A
{
public:
	B()
	{
		cout<<"B Constructed"<<endl;
	}
	virtual ~B()
	{
		cout<<"B Destructed"<<endl;
	}

	void fun()
	{
		cout<<"B fun called"<<endl;
	}

	virtual void virtual_fun()
	{
		cout<<"B virture fun called"<<endl;
	}
};

//test demo
void main()
{
	cout<<"Base point to B=================="<<endl;
	A* pA = new B();
	pA->fun();
	pA->virtual_fun();
	delete pA;

	cout<<"Point to B===================="<<endl;
	B* pB = new B();
	pB->fun();
	pB->virtual_fun();

	delete pB;
}


运行结果



几点总结:

  1. 构造函数不能为虚函数,因为子类构造时需要先构造基类,如果为虚函数,则基类不能构造。
  2. 析构函数最好是为虚函数,否则如果基类指针指向子类,析构时不会调用子类的析构函数,而如果是子类指针指向之类,则是先析构子类再析构基类,没有问题,所以为了保证基类和子类的析构函数都被调用,析构函数必须声明为虚函数。
  3. virtual方法会被子类覆盖,而非virtual方法不会被覆盖。


【ROS2】从yaml文件中读取参数配置 ROS2:从yaml中读取参数,到节点;使用C++演示参数的增、删、改、查、遍历、监听变化 阅读详情

相关推荐

别再手动拆解字节了!用博图这个功能指令,5分钟搞定ARRAY转BOOL数组

本文详细介绍了西门子博图中`ARRAY_TO_BOOL`功能指令的高效应用,帮助工程师快速实现ARRAY到BOOL数组的转换。通过实战案例和参数配置指南,展示了如何5分钟内完成传统方法需半小时的任务,大幅提升PLC编程效率,特别适用于通信报文解析和设备状态监控。

weixin_42653691的博客 260

为什么析构函数是虚函数

为什么析构函数是虚函数   写成虚的是为了在实现多态的时候不造成内存泄露, 比如:  class a  {  int aa;  public:  virtual ~a(){};  };  class b : public a  {  int bb;  };  如果你这样:  a *pa = new b; // upcast  然后这样: 

路楷的专栏 618

自动驾驶技术路线之争:纯视觉与多模态融合的成本与性能博弈

本文深入剖析了自动驾驶领域两大主流技术路线——纯视觉与多模态融合的本质差异。文章从成本结构、性能博弈与商业逻辑等多维度展开,揭示了纯视觉方案在硬件成本与数据算力投入上的权衡,以及多模态融合方案在安全冗余与感知稳定性方面的优势。这场技术路线之争,实则是车企在性能、成本与商业化落地之间寻求平衡的综合博弈。

weixin_29038303的博客 390

C++选择题要点 正在手打未完待续

做题时的总结

想让你搞懂的博客 757

硬件基础知识-电机知识

步进电机存在空载启动频率,所以步进电机可以低速正常运转,但若高于一定速度时就无法启动,并伴有尖锐的啸叫声;在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。给电机两根线供电,电机就可以旋转,给正电压,电机正转,给相反电压,电机反转;电压越大,电机转得越快,电压越小,转速也变小。是一种直流电机,有刷电机的定子上安装有固定的主磁极和电刷,转子上安装有电枢绕组和换向器。控制器:使用专用的电子控制器来监测和控制电机的转速、电流和方向。线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

weixin_46969363的博客 2294

基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)

基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)

Robot_PLC_HMI_Automation 2177

c++的内存分配(转载)

但是五标题以后的内容( c++的指向子类对象的父类指针)是本人自己的代码 思想 文章.  转载请注明出处.http://blog.youkuaiyun.com/weitian826/article/details/6913482 转载了别人的文章 再 加上了 自己的理解.  正确性待考证. 一.  c++的内存分配: http://blog.sina.com.cn/s/blog

再见理想 494

Claude Code(1):手把手教你安装配置 Claude Code

Claude Code 是一款强大的 AI 编程助手工具,能够帮助开发者提升编码效率。本文将详细介绍如何在不同操作系统上安装和配置 Claude Code,让你快速上手这款工具。

blues_C的博客 749

C++虚函数与多态性(1)

静态联编 联编是指一个程序自身彼此关联的过程,在这个联编过程中,需要确定程序中的操作调用与执行该操作的代码段之间的映射关系,就是把函数调用与函数的程序代码联系在一起。 #include <iostream> using namespace std; int max(int a,int b); int max(int a,int b,int c); int max(int a,int b){ return a>b?a:b;} int max(int a,int b,int c){

qq_45836790的博客 296

ISOLAR Autosar BSW 配置 之 Com

Autosar ISOLAR Bsw Configuration 之 Com

qq_42262743的博客 453

如何在Ubuntu 22.04系统上安装CUDA 12.9

本文提供Ubuntu22.04系统上安装CUDA12.9的简明指南:1)确认已安装适配575驱动;2)清理旧版本后安装必需依赖库;3)通过deb包方式添加英伟达源并安装CUDA12.9工具包;4)配置环境变量;5)通过nvcc-V和nvidia-smi命令验证安装。文中包含常见问题解决方法及多显卡使用说明,全程约需10分钟完成安装。

2501_93651177的博客 1480

Boolan c++面向对象下 第二周笔记

在上图中,c继承b,b集成a。在class A 中包含m_data1和m_data2以及一个指针。 Class B,继承了A,因此B中除了自己的m_data3外,还包含了class A的所有内容,class C也同理。 在一个类中,若有一个虚函数,内存中有一个指针,若有一万个虚函数,内存中依然有一个指针 在继承关系中,子类不仅继承了父类的所有数据,也继承了父类的函数,准确的说是父类函数中的调

kwangxn11的博客 361

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

纯虚函数和虚函数的区别和用途

C++中的虚函数和纯虚函数用法 象这样定义的就是纯虚函数 virtual void f(void) = 0; 象这样的就是虚函数 virtual void f(void);   1.虚函数和纯虚函数可以定义在同一个类(c...

创想 497

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

什么情况下应当声明虚函数?纯虚函数声明

http://blog.youkuaiyun.com/yangbo_hbzjk/article/details/7472082 注意: 只能用virtual声明类的成员函数,使之成为虚函数,不能将类外的普通函数声明为虚函数。因为虚函数的作用是允许在派生类中对基类的虚函数重新定义。所以只能用于类的继承层次结构中。 一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非vi

saileilong的专栏 1091

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++单冒号表示继承以及虚函数virtual

#include &lt;iostream&gt; using namespace std; class Base { public: virtual void fun(int x = 0) { cout &lt;&lt; "Base::fun(), x = " &lt;&lt; x &lt;&lt; endl; } }; class Derived :...

nealcat的博客 453

C++虚函数

虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。 class Cman { public: virtual void Eat(){……}; void Move(); pri

liyuan408的博客 354

多态性(二)——动态多态性之虚函数

1.虚函数的作用   C++中的虚函数是用于解决动态多态性的问题。所谓虚函数,就是在基类声明函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此函数。 那么虚函数有何作用呢?我们先来看看这样一段程序: 在上一篇讨论静态多态性的文章里,让我们在其中的Circle类和Cylinder类中都增加一个函数void display(); 在Circle类中: void Circle::d

zcmlimi的专栏 1843

C++虚函数学习笔记(仅供参考)

1、虚函数的作用: 允许在派生类中重新定义与基类同名的函数,并且可以通过基类的指针或引用来访问基类和派生类中的同名函数。 2、虚函数的工作原理 编译器处理虚函数的方法:对每个对象添加一个隐藏成员。 隐藏成员中保存了一个指向函数地址数组的指针,这种数组称为虚函数表(vtbl)。虚函数表中存储了为类对象进行声明的虚函数的地址。 例如:基类对象包含一个指针,该指针指向基类中所有虚函数的地址表。

Study_C++ 1515

多态: 虚函数

f. 类中的虚函数仅对派生类中重新实现的函数起作用,对其他函数没有影响(虚函数的机制是通过在对象的起始位置增加一个虚表指针,该指针指向虚函数表,在虚函数表中存储的是当前类型所有虚函数的入口地址) -- 虚函数是动态绑定的,而普通函数是静态绑定的。d. 异常会向上进行传递(在函数中发生的异常如果在函数内部没有处理这该异常会传递到函数调用的位置), 如果到程序的最外层的catch中有不能匹配的异常(程序中发生的异常不能被捕获),系统会自动的调用terminate来终止程序的执行。

Q_v_R的博客 90

C++虚函数与纯虚函数用法与区别

转载地址:http://www.cnblogs.com/bluestorm/archive/2012/08/29/2662350.html 1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。    2. 虚函数可以被直接使用,也可

Micro_Ryan的专栏 550

C++ 虚函数与纯虚函数

#include<iostream> #include<string> using namespace std; class A{ public: virtual void fun1()=0; //纯虚函数 virtual void fun1(){cout<<"A::fun1"<<endl;} //虚函数 ...

weixin_30820077的博客 74

C++][基础知识 5] 虚函数

五 虚函数 VC++中的虚函数主要用来实现程序运行的多态性。所谓多态性是指发出同样的消息(如函数的调用)被不同类型的对象接受时导致不同的行为。利用多态性,用户只需发送一般形式的消息,而将所有的实现留给接受消息的对象。对象根据所接受到的消息而做出相应的操作。 多态性是面向对象程序设计的重要特征之一。它与前面讲过的封装性和继承性构成了面向对象程序设计的三大特征。这三大特性是相互关联的。封装...

Jacky_Dai的专栏 281

C++中的虚函数(virtual function)

一.简介    虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次: class A{public:virtual void foo() { cout &lt;&lt; "A::foo() is called" &lt;&lt; endl;}};class B: public A{public:virtual voi...

weixin_33921089的博客 198

UE5 C++(25-1):按键映射绑定与使用鼠标滑轮键来控制相机镜头的缩放。c++ 里子类要实现父类里的虚函数, 还需要在子类的头文件里重新声明此虚函数。final 用于类继承与虚函数重写

(139)(140)

zhangzhangkeji的博客 230

类中的奥秘

奥秘1:struct关键字与class关键定义类的区别 (1)定义类差别 唯一差别在于默认访问级别: 默认情况下,struct成员的访问级别为public,而class成员的为private。 (2)继承差别 使用class保留字的派生类默认具有private继承,而用struct保留字定义的类某人具有public继承。 classBase{ /*....*/}; struct D1

我的E家 1275

static和const 类的包含(类的组合)虚函数和多态C++day5

static和const static 用法一: static修饰成员变量 --》静态成员变量 特点: 第一:只能在类的外面初始化,其它方法(构造函数,普通公有函数)都无法初始化 第二:static修饰的成员变量,是该类所有的对象共享的 第三:static修饰的成员变量优先于对象而存在,对象还没有创建,static修饰的成员变量已经在内存中有了 statict修饰的成员变量可以使用类名直接调用 类名::静态成员 用途: 实际开发中,往往用来在对象之间传递信息,static修饰的成员变量相当于是该类对

weixin_53605054的博客 237
上一篇: C++ 智能指针详解
下一篇: 操作注册表,关闭计算机
Butterfly_Dreaming
博客等级 码龄16年 23粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值