B继承自A,A指针无法隐式转换为B指针,函数参数只管指针类型,与实际指向对象无关

非C++内建型别A和B, 在哪几种情况下B能隐式转化为A? 有四种方法: ?         第一种:classB: public A {…} B公有继承A,可以是间接公有继承,当把B的对象赋值给A,会发生隐式转换。 (待求证,保护继承、私有继承、B是A的成员能否发生转换?) ?         第二种:classB: { OperatorA(); …. } 转换constructor。类B实现了隐式转化为类A;compi 阅读详情

#include <iostream>

#include <string>

 

using namespace std;

 

class A

{};

 

class B: public A

{};

 

void F( B& b)

{

    cout<< "F( B& b)"<< endl;

}

void F( A& a)

{

    cout<< "F( A& a)"<< endl;  

}

 

int _tmain(int argc, _TCHAR* argv[])

{

    A* p1= new B;

    F( *p1);//调用F( A& a)

 

    A a;

    B* p2= ( B*) &a;

    F( *p2);//调用F( B& b)

 

    /*F( *p2)调用分析:F( B& b)相当于f( B* p),F( A& a)相当于f( A* p),

    而F( *p2)则相当于f( p2),而p2是B*型,当然是调用f( B* p),即调用F( B& b)。

    F( *p1)亦同理。

    可知,应根据参数类型匹配,而不管实际指向的对象(函数参数只管指针类型)。*/

 

    system("pause");

    return 0;

}

 

但是,如果没有void F( A& a)函数,即:

class A

{};

 

class B: public A

{};

 

void F( B& b)

{

    cout<< "F( B& b)"<< endl;

}

int _tmain(int argc, _TCHAR* argv[])

{

    A* p1= new B;

    F( *p1);//编译出错,无法将A*隐式转换为B*。本应调用f( A* p),但只有f( B* p),而由A*无法隐式转换为B*,所以不调用f( B* p),出错。

 

    system("pause");

    return 0;

}

C++多态机制深度解析:从虚函数表到设计模式实战 多态是面向对象编程的核心概念之一,它允许同一接口在不同上下文中表现出不同行为。其实现原理基于虚函数机制,通过虚函数表(vtable)在运行时动态绑定函数调用,实现了代码的灵活性和可扩展性。这一机制在C++中尤为重要,它使得程序能够在不修改现有代码的基础上,通过继承体系扩展新功能,从而遵循开闭原则。在工程实践中,多态广泛应用于框架设计、插件系统、算法策略切换等场景,例如工厂模式和策略模式都深度依赖多态实现。理解虚函数表的工作原理和虚析构函数的必要性,是掌握C++多态的关键。本文将从基础概念切入,深入探讨多态的 阅读详情

相关推荐

AI学习-python

语法简洁、可读性强,代码结构清晰,上手难度低。同一份 Python 代码可在 Windows、Linux、macOS 等多操作系统直接运行。① 自动化脚本、桌面工具 ② 数据处理、科学计算(Pandas、Numpy) ③ 网络爬虫(Requests、BeautifulSoup) ④ Web 网站开发(Flask、Django) ⑤ AI / 机器学习(TensorFlow、PyTorch)

qq_62408075的博客 314

搜狗2017校招C++笔试题复盘:从内存管理到多线程与算法的考点全解析

在C++校招笔试中,基础知识与工程实践的结合一直是考察重点。从字符串处理、指针与const辨析,到对象生命周期与内存管理,再到多线程同步、ABA问题与原子操作,这些考点不仅体现了语言底层原理的重要性,也映射出并发编程在真实系统中的价值。快速幂、单调栈、单例模式等经典算法与设计模式,更是衡量候选人对时间复杂度和架构思维理解的关键。掌握这些技术概念,不仅能应对面试中的手写代码,还能为日常开发中的性能优化与健壮性设计提供支撑。而回顾搜狗2017校招C++笔试试卷,正是系统梳理这些知识脉络的一条高效路径——通过分析

weixin_30291791的博客 397

W5500 MACRAW模式实战:在ESP32上抓取并解析原始以太网数据包

本文详细介绍了如何在ESP32开发板上使用W5500芯片的MACRAW模式捕获和解析原始以太网数据包。通过硬件连接指南、代码实现示例和协议解析技巧,帮助开发者深入理解网络通信底层机制,实现网络嗅探和自定义协议开发等高级应用。

weixin_42520573的博客 418

UE4___C++___智能指针——优缺点

为什么使用UE4智能库原因 1.std::shared_ptr(and even tr1::shared_ptr)不是在所有平台上都可用。 2.使得在所有编译器和平台上有更加一致的实现。 3.可以和其他虚幻容器及类型无缝地协作。 4.更好地控制平台特性,包括线程处理和优化。 5.我们想提供线程安全的功能(以获得好的性能)。 6.我们想在性能方面有更多的控制权(内联函数、内存、虚函数的应用等)。 7.在不需要的时候倾向于不引入新的第三方依赖。 整体优点 1.您可以像操作常规的C++指针那样来复制、解引用及比较

weixin_43945471的博客 898

用LT1166+MOS管打造实验室级恒流源:闭环反馈与推挽驱动的深度调优

本文详细介绍了基于LT1166电流模式控制器与MOS管推挽架构的实验室级恒流源设计方法。通过闭环反馈调优和动态响应优化,实现带宽达100kHz、纹波低于0.1%的高性能恒流输出,适用于精密仪器校准和半导体测试等场景。重点解析了系统架构设计、MOS管选型策略以及频率响应测试等关键技术要点。

weixin_29290379的博客 205

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3316

c++知识积累

c++中的public继承,private继承 (重点)0、C++类中对同类对象private成员访问是可以的,由于产生这种疑惑的原因是自己对私有成员变量的理解有误,封装是编译期的概念,是针对类型而非对象的,在类的成员函数中可以访问同类型实例对象的私有成员变量。 详情:https://www.cnblogs.com/yanqi0124/p/3828507.html 1、在c++的类中可将其成...

oyang_mrong的博客 217

Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测的详细项目实例

这些数据包含了随时间变化她动态信息,具有显著她趋势她、周期她和季节她特征。该模型她核心优势在她其能够自适应地学习数据中她多层次时序信息,捕捉时间序列中她长短期依赖关系,从而提高预测她准确她和可靠她。本项目旨在实她一个基她PTO-TCN-LTTM-TFSttfntion她多变量时间序列预测模型,通过粒子群优化算法优化时间卷积长短期记忆神经网络,并融合注意力机制,提高模型她预测精度和稳定她。本项目模型她实她分为多个阶段,首先她数据预处理,接着她PTO优化,然后她TCN和LTTM网络她构建她训练。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1080

C++ 多态

在虚函数的后⾯写上 =0 ,则这个函数为纯虚函数,纯虚函数不需要定义实现(实现没啥意义因为要被派⽣类重写,但是语法上可以实现),只要声明即可。包含纯虚函数的类叫做抽象类,抽象类不能实例化出对象,如果派⽣类继承后不重写纯虚函数,那么派⽣类也是抽象类。纯虚函数某种程度上强制了派⽣类重写虚函数,因为不重写实例化不出对象。class Carpublic:public:cout

Small_entreprene的博客 984

OpenDRIVE车道计算避坑指南:为什么你的poly3曲线总对不齐?

本文深入解析OpenDRIVE标准中车道几何计算的三大核心难题:参数化三次多项式(ParamPoly3)的坐标系转换与参数映射、车道偏移与宽度的优先级判定,以及螺旋线(Spiral)接续的平滑性保障。通过实战案例与代码示例,提供了一套避免车道线错位与曲率不连续的精确计算与验证方法,是高精地图开发与仿真场景构建的实用避坑指南。

q9w8e7r6t5的博客 423

LVGL hal disp(porting display)

LVGL本身是没有对接最终的显示框架的,所以到具体的某个平台上,需要自行porting。

Bigan(安)的博客 2097

C++面试基础

自己整理了一些常见的面试题,频率挺高的都是,而且感觉这里这些基础的东西都会问,自己过几天也要面试了,所以发上来让大家一起看看,有什么错误的地方望提醒我纠正。 32位数据类型以及sizeof大小、   char:1; short int:2; int:4; long:4; long long:8; float:4; double:8;bool:1    指针...

dingzhenzha7040的博客 227

华为OD机试 - 猴子吃桃 - 二分查找(Java 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3848

C++第七篇(续)

C++(续)

m0_70707810的博客 397

【图像分类】卷积神经网络之VGGNet网络模型实现花卉图像识别(附代码和数据集,PyTorch框架)

卷积神经网络之VGGNet网络模型实现花卉图像识别(附代码和数据集,PyTorch框架)

学无止境、积少成多、厚积薄发 2430

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Leno 语言入门指南

《Leno语言入门指南》摘要 Leno是一门介于Python和Go之间的静态类型检查脚本语言,融合了动态语言的灵活性和静态类型的安全性。该指南全面介绍了Leno的核心特性: 基础语法:支持类型推断(var)、任意精度整数、并行赋值和代码块作用域 类型系统:包含int(自动处理溢出)、float、string、bool等基础类型,以及泛型数组和字典 控制流:提供if/switch条件语句、多种for循环形式以及类型守卫功能 函数编程:支持高阶函数、匿名函数、闭包和默认参数 面向对象:通过struct实现,包含

cheng8214的专栏 313

精雕软件(JDpaint) 5.5 绿色版

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

嵌入式软件(C/C++/RTOS/Linux)基础面试题

摘要:本文总结了嵌入式开发中的核心知识点,分为三部分:1) C/C++编程要点,包括static/volatile关键字、虚函数、RAII、指针与数组区别等;2) MCU/RTOS相关技术,涵盖任务调度、DMA应用、中断处理、通信协议等;3) Linux系统编程,涉及内核态通信、驱动开发、进程线程区别、IPC机制等。最后提供了面试反问建议和疑难问题解决思路。内容涵盖从底层硬件到操作系统层面的嵌入式开发核心技术,适合开发者复习和面试准备。

Leo_Mine的博客 1106

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Golang速通(Javaer版)——从基础语法到并发模型

这篇文章总结了Go语言的基础语法要点,包括: 变量和常量 变量类型需要显式转换 常量分为无类型常量和显式类型常量 使用iota实现枚举功能 控制流语句 if语句不需要括号,支持初始化语句 switch默认不穿透,需用fallthrough显式穿透 只有for循环,可省略条件变成"伪while"循环 复杂数据类型 切片(Slice)本质是结构体,传递高效 动态扩容策略:小容量翻倍,大容量平滑增长 切片是数组的视图,修改会影响原数组 哈希表(Map)的多种声明方式,nil map可读取但不

fancyfor的博客 445

13. c++基础知识回顾(2)

拷贝构造函数是特殊的构造函数,用于用一个已存在的同类型对象,去创建一个全新对象,完成对象成员的复制。// 1. 分配和原对象等长堆空间// 2. 拷贝内容,不共用内存此时s1和s2拥有两块独立堆内存,析构互不干扰,不会崩溃。拷贝构造函数参数必须是同类const &不用引用、值传递会无限递归;不加const无法接收临时对象,场景受限;用指针的话编译器不认为它是拷贝构造,不会自动调用;所以标准写法强制要求const 类名&。场景是否允许核心原因static 修饰构造/析构禁止。

2301_78486960的博客 256

Linux内存管理:虚拟地址空间(静态分析总篇)

由一个进程的虚拟(或逻辑)地址所构成的地址空间,一看就非常抽象,说了跟没说一样,现在让我们先抛弃抽象的概念,从一个故事开始:现在有一个千万富翁,他手里面有3千万,这个富翁有5个儿子,富翁对他的每一个儿子都说:儿啊,等我死后,我的三千万就都是你的了。此时他的每一个儿子都很开心,他们都认为等老爹死了就可以得到他的三千万,然后他们就开始幻想了,大儿子想等拿到钱后就买一百双AJ,二儿子想等拿到线后就去澳门当赌神.....但是此时钱还不是他们的,他们就只是在做白日梦而已。

TCW1121的博客 492

C++头文件相互引用,最好一个#include,另一个class C;

C++头文件相互#include时最好是: (1)在"CA.h"中 #include "CB.h". (2)在"CB.h"中用类的前向声明: class CA; (3)最好加上头文件卫士( #ifndef ***   #define ***  #endif) 示例如下: (1)"CA.h": #ifndef HEADER_CA #define HEADER_CA

tmljs1988的专栏 2万+

Node与NodeVisitor

osg::ref_ptr model; NodeVisitor vv( TRAVERSE_ALL_CHILDREN);   model->accept( vv); 假设model的模型结构如图: 则model->accept( vv);多态,相当于调用Group::accept(NodeVisitor)。 注意,我开始误认为Group没有对accept()进行重写, 但后来在遍历

tmljs1988的专栏 1万+

数组名,数组首地址,a,&a,&a[0]

(1)指针数组: 是数组,但数组中的每个元素都是指针 int *p[5];//如p[2]是指针,可*p[ 2]=3; (2)指向数组的指针: 是个指针,但它指向的是一个数组 int a[5]; int (*p)[5];//与前一行比较,*p相当于a,即p=&a;就像:int m;int *pm;//*pm就相当于m.pm=&m; p= &a;//可与前一行合并为int (*p)[5]=&

tmljs1988的专栏 1万+
上一篇: 二叉排序树的查找
下一篇: Node与NodeVisitor
tmljs1988
博客等级 码龄19年 134粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值