首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ 实现 super 关键字

請問C++是否類似super這樣的功能 C++ super 关键字? --- 根据参考资料,其实 C++ 设计之初是考虑 super 关键字的。...但是为什么不使用 super 呢?主要是因为 多重继承 这一 C++ 特性。如果一个 class 多个 父,那么使用 super 的语义就不清晰了。...突然某一天,我们需要在这数十个子类十几个需要增加某个公有的成员函数 newFunc(),其实现都是一样的。...麻烦来了,这些个派生,或多或少调用了父的实现 PrototypeClass::someFunc(),如果变成上图的关系的话,PrototypeClass 变成了这些的 祖父。... C++ 中使用 super --- 解决方法很简单,以 DerivedBrabo 为例, DerivedBrabo.h 文件这么写: #ifndef __DERIVED_BRAVO_H__ #

5.8K50
您找到你想要的搜索结果了吗?
是的
没有找到

《逆袭进大厂》第三弹之C++提高篇79问79答

112、知道C++的组合?它与继承相比什么优缺点? 一:继承 继承是Is a 的关系,比如说Student继承Person,则说明Student is a Person。...毫不夸张的来讲,了智能指针,代码几乎不需要再出现delete了。 116、手写实现智能指针 1) 智能指针是一个数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。...,但是对于该类的派生来说,相当于公有成员,派生可以被访问。...2) 三种继承方式 ① 若继承方式是public,基成员派生的访问权限保持不变,也就是说,基的成员访问权限,派生仍然保持原来的访问权限; ② 若继承方式是private,基所有成员派生的访问权限都会变为私有...把你知道的都说一说 1) 构造函数,构造函数初始化对象,派生必须知道基函数干了什么,才能进行构造;当虚函数时,每一个一个虚表,每一个对象一个虚表指针,虚表指针构造函数初始化; 2)

2.2K30

C++【继承】

继承,允许将 子类 对象直接赋值给 父,但不允许 父 对象赋值给 子类 这其实很好理解,儿子以后可以当父亲,父亲还可以当儿子?...,具体切片实现原理还后续再进行讲解 注意: 切片只 子类->父 时发生,因为父无法满足子类的需求 ---- 5、派生的默认成员函数 派生(子类)也是 ,同样会生成 六个默认成员函数(用户未定义的情况下...指针指向空间预留一个位置,可以用于多态 因此虚继承用的是第二个位置 新建对象进行兼容赋值时,对象指向指针处 该指针(偏移量)指向的目标位置不定 无论最终位置何处,最终汇编指令都一样(得益于偏移量的设计模式...,可以通过 组合,也可以通过 继承 ---- 总结 以上就是本次关于 C++【继承】的全部内容了,本篇文章,我们重点介绍了继承的相关知识,如什么是继承、如何继承、继承该注意些什么,最后还学习了多继承模式容易引发的菱形继承问题...,探究了其原因及解决方法,关于继承是如何辅助实现多态的,可以期待下篇文章:C++【多态】 ----

13210

C++系列笔记(五)

这很重要,它意味着MakeFishSwim(),可通过Fish&参数调用派生定义的Swim(),而无需知道该参数指向的是哪种类型的对象。...为什么需要虚构函数 上面的代码如果加入析构函数释放内存,对于使用new自由储存区实例化的派生对象,如果将其赋值给基指针,并通过该指针调用delete,将不会调用派生的析构函数,这可能导致资源未释放...抽象基和纯虚函数 不能实例化的基被称为抽象基,这样的基只有一个用途,那就是从它派生出其他 C++,要创建抽象基,可声明纯虚函数。...注意:C++关键字virtual的含义随上下文而异(我想这样做的目的很可能是为了省事),对其含义总结如下: 函数声明,virtual意味着当基指针指向派生对象时,通过它可调用派生的相应函数。...可将复制构造函数声明为虚函数 根本不可能实现虚复制构造函数,因为方法声明中使用关键字virtual时,表示它将被派生的实现覆盖,这种多态行为是在运行阶段实现的。

64730

每日一问06 构造函数可以是虚函数

,为什么 和普通函数对比 首先,C++不支持虚拟构造函数。...关于C++什么不支持虚拟构造函数,Bjarne很早以前就在C++ Style and Technique FAQ里面做过回答:A virtual call is a mechanism to get...根本说不清楚:必须创建好了,才能用,不懂 抽象和具体关系.接口不属于具体一个 析构函数可以是虚函数,为什么 参考思路: 可以是 析构函数 执行顺序是 派生 ,基 如果析构函数不被声明成虚函数,则编译器实施静态绑定...,删除指向派生的基指针时,只会调用基的析构函数而不调用派生析构函数,这样就会造成派生对象析构不完全。...如果声明了,触发 派生 ,基 正确析构顺序。

68330

一文带你掌握多继承,菱形继承以及虚拟继承

> 和父定义同名的成员函数. 问题:下面的void Print(int a)函数和void Print(double b)函数构成函数重载?...cout << endl; return 0; } 二、默认成员函数 还记得C++的六大天选之子?...那派生,这几个成员函数是如何生成的呢? (1) 构造函数: 派生的构造函数必须调用基的构造函数,利用基的构造函数去初始化基的部分.并且是先调用基的构造之后,再去构造派生的成员....单继承的好处在于它可以保证之间的关系更加清晰和简单,并且可以减少代码的冗余和复杂度。 多继承: C++,多继承是指当一个继承自多个父时的继承方式。...继承允许你根据基的实现来定义派生的实现。继承方式,基的内部细节对子类可见 。继承一定程度破坏了基的封装,基的改变,对派生很大的影响。派生和基间的依赖关系很强,耦合度高。

18450

今年的面试太难了?2023 年 30 个 OOP 面试问题和答案也许可以帮到你

哪些不同类型的继承? 继承可以分为以下5种类型: 单继承: 子类直接从基派生 多重继承: 子类派生自多个基。 多级继承: 子类派生自一个同时也派生自另一个基。...如果基包含非静态方法,则必须构造一个对象。但是,如果类包含静态方法,则不需要生成对象。在这种情况下,您可以使用名直接调用那些静态方法。 23. C++,结构体和之间什么区别?...C++,结构体和之间什么区别? 结构体和之间的主要区别在于,结构体,成员默认为公共访问级别,而在,默认为私有访问级别。...我们可以一个重载构造函数? 我们可以重载构造函数。事实上,默认构造函数、带参数的构造函数和拷贝构造函数都是构造函数的重载形式。 28. 我们可以一个重载析构函数? 不。...一个不能重载析构函数。一个只能有一个析构函数存在。 29. 什么是虚函数? 虚函数是用于派生覆盖父方法的函数。它用于提供的抽象。 C++,使用virtual关键字声明虚函数。

30541

2023 年 30 个 OOP 面试问题和答案

哪些不同类型的继承? 继承可以分为以下5种类型: 单继承: 子类直接从基派生 多重继承: 子类派生自多个基。 多级继承: 子类派生自一个同时也派生自另一个基。...如果基包含非静态方法,则必须构造一个对象。但是,如果类包含静态方法,则不需要生成对象。在这种情况下,您可以使用名直接调用那些静态方法。 23. C++,结构体和之间什么区别?...C++,结构体和之间什么区别? 结构体和之间的主要区别在于,结构体,成员默认为公共访问级别,而在,默认为私有访问级别。...我们可以一个重载构造函数? 我们可以重载构造函数。事实上,默认构造函数、带参数的构造函数和拷贝构造函数都是构造函数的重载形式。 28. 我们可以一个重载析构函数? 不。...一个不能重载析构函数。一个只能有一个析构函数存在。 29. 什么是虚函数? 虚函数是用于派生覆盖父方法的函数。它用于提供的抽象。 C++,使用virtual关键字声明虚函数。

25530

再探虚函数

函数模板的使用 动态多态 的函数前加上virtual关键字,派生重写该函数,运行时将会根据所指对象的实际类型来调用相应的函数,如果对象类型是派生,就调用派生的函数,如果对象类型是基,...必须是虚函数(派生一定要重写基的虚函数) ---- Q2:什么是纯虚函数,与虚函数的区别 1、定义一个函数为虚函数,不代表函数为不被实现的函数。...2、纯虚函数是声明的虚函数,它在基没有定义,但要求任何派生都要定义自己的实现方法。实现纯虚函数的方法是函数原型后加"=0" 3、声明了纯虚函数的是一个抽象。...---- Q7:构造函数和析构函数可以调用虚函数,为什么?...所以调用基的析构函数时,派生对象的数据成员已经销毁,这个时候再调用子类的虚函数没有任何意义。 ---- Q8:静态函数能定义为虚函数

84320

C++的函数隐藏、覆盖和重载

对于C++ 来说, 如果 Base 的某个函数没有 virtual 关键字, 那该函数跟 Derived 的同名函数(参数也相同)是没有什么关系的.      ...如果反过来想, 相对于 C++, 那不是 java 的每个函数都是虚函数? ...关键字, 但是因为是分别存在与派生和基的不同函数, 所以不存在覆盖的关系(重载更不可能).     ...编译先在 Derived 查找匹配 g(3.14f) 的函数,  他找到了 g(int) , 并且 Derived 只有一个函数匹配....virtual 关键字, 好像就是告诉你, 我这个函数可以给派生类同名字同参数的函数覆盖; 纯虚函数更是直接告诉派生, 你一定要写一个同名字同参数的函数覆盖我,  哈哈!

1.1K10

微信信用卡还款后台开发最新面试真题

二、谈谈 C++ 的重载跟覆盖。...三、一个基 A 一个派生 B,A 跟 B 中都有一个相同的函数,该函数 A 没有定义为虚函数,分别 new 了 基 A 和派生 B 的一个对象,并用后者去初始化前者,前者调用这个相同的函数...,到底是调用基 A 的还是派生 B 的,为什么?...四、谈谈 C++ 的友元函数 ? 五、谈谈内存泄漏是怎么造成的,出现内存泄漏了如何定位? 六、说一下拷贝构造函数的作用,深浅拷贝,以及什么时候用深拷贝什么时候用浅拷贝? ?...七、对数据库了解? ? 八、说说 TCP 三次握手跟四次挥手,这两个能少一次? ? 九、谈谈 http 协议。

69530

C++】继承

那这里的不可见是什么意思呢? 这里的不可见是指基的私有成员还是被继承到了派生对象,但是语法上限制派生对象不管里面还是外面都不能去访问它。...继承的作用域 3.1 基派生作用域相互独立 首先大家要知道: 继承体系派生都有各自独立的作用域。...之前我们说过,一个工程里面可以同名的变量或函数等,只要它们不在同一个域就可以,因为同一个域的话就会出现命名冲突的问题。 那子类和父可以?...派生的默认成员函数 之前和对象的学习,我们学过里面有6个默认成员函数 即我们不写,编译器可以自动生成,那派生,这6个默认成员函数是如何生成的呢?...Person不是一个静态成员变量_count,只需Person的构造函数里面加一句++_count就行了 为什么这样就可以呢?

9510

c++和继承面试点25连问

4. c++多态什么作用 个人理解,其实就是实现了接口的重用,同样的接口,派生与基不同的实现。 5....所以当派生时,析构函数一定要是虚函数。 8....友元什么 与友元函数类似,一个A声明另外一个B为friend类型,那么这个B就是友元,它访问A的私有成员和保护成员都不受限制。...由成员变量和是否虚函数决定,如果类中有虚函数,那就在所有成员变量的基础上加上一个虚函数指针的大小,64位机器,虚函数指针为8个字节,注意计算大小的时候要考虑字节对齐的问题。...的成员函数地址呀,编译器编译的时候就给了成员函数地址,且一个的成员函数是唯一的,所有对象共用。 24.

88910

C++和java多态的区别

http://blog.csdn.net/yangquanhui1991/article/details/49668975 C++和java多态机制的异同 以前我个错误的观点:即使C++和java...可惜事与愿违,事情并不总是你想象的那样子。(在看下文以前,你最好先考虑一下这个问题,你什么看法呢?) ok,让我们进入正题。...唔,你要说了,好象差不多嘛,不是都要维护一张函数表?别急,让我们先看一下例子,这样你就能更好的理解它们之间的区别到底多大了。...下面是C++和java的例子,不看后面的答案,你能够正确说出它们的执行结果?...而C++只有构造完毕后(所有的构造函数都被成功调用)才存在,其函数表和对象的实际类型才会确定。所以这两个例子的执行结果会不一样。

90110

C++多态虚函数动态绑定

原理 C++,通过基的引用或指针调用虚函数时,发生动态绑定。引用(或指针)既可以指向基对象也可以指向派生对象,这一事实是动态绑定的关键。...C++的标准规格说明书中说到,编译器必需要保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证正确取到虚函数的偏移量)。...缺点 1.动态绑定在函数调用时需要在虚函数表查找,所以性能比静态函数调用稍低。 2.通过基类型的指针访问派生自己的虚函数将发生错误。...声明一个车(vehicle)基Run、Stop等成员函数,由此派生出自行车(bicycle)、汽车(motorcar),从bicycle和motorcar派生出摩托车(motorcycle)...程序vehicle,motorcar,bicycle均属于同一个组,而且是通过公有派生来的,因此满足赋值兼容规则。

1.3K20

C++】从零开始认识继承

1 前言 我们日常的编程,继承的应用场景很多。它可以帮助我们节省大量的时间和精力,避免重复造轮子的尴尬。同时,它也让我们的代码更加模块化,易于维护和扩展。可以说,继承技术是C++的灵魂。...private成员 派生不可见 派生不可见 派生不可见 总结起来: 基private成员派生无论以什么方式继承都是不可见的!!!...3.3 继承的作用域 通过对C语言的C++的学习,我们知道域这个概念。域分为局部域和全局域,相同的域不能有同名变量与同名函数(重载除外)。局部域与全局域会影响生命周期。而C++ 又有了域!...术语 “白箱”是相对可视性而言:继承方式,基的内部细节对子类可见 。继承一定程度破坏了基的封装,基的改变,对派生很大的影响。派生和基间的依赖关系很强,耦合度高。...之间的关系可以用继承,可以用组合,就用组合。 8 有关继承的经典面试题 C++多继承,为什么java等语言没有? 历史原因!

5110

重载(overload)、覆盖(override)、隐藏(hide)的区别

)还是一样被覆盖,此时编译不会出错,函数test调用的是CD的f(int)    所以,的某些函数,如果没有virtral关键字,函数名是f(参数是什么我们不管),那么如果在派生CD也声明了某个...在这里,我要强调的是,这种覆盖,要满足两个条件  (a)virtual关键字,函数声明的时候加上就可以了  (b)基CB的函数和派生CD的函数要一模一样,什么叫一模一样,函数名,参数,...通过上面三个例子,得出一个简单的结论 如果基的函数和派生的两个名字一样的函数f 满足下面的两个条件 (a)函数声明的时候virtual关键字 (b)基CB的函数和派生CD的函数一模一样...下面我要讲最关键的地方了,好多人认为,基CB的f(int)会继承下来和CD的f(int,int)派生CD构成重载,就像实例一想像的那样。   对?...(暂且不论参数是否相同)的函数,而编译器最终选择了派生的函数,那么我们就说这个派生的成员函数"隐藏"了基的成员函数,也就是说它阻止了编译器继续向上查找函数的定义.

2.3K60

C++】多态

之前的文章我们学习了C++的继承,这篇文章我们来学习多态 前言 需要声明的,本文中的代码及解释都是vs2022下的x86程序,涉及的指针都是4bytes。...注意⚠: 重写基虚函数时,派生的虚函数不加virtual关键字,也可以构成重写(可以认为继承后基的虚函数被继承下来了派生依旧保持虚函数属性),但是该种写法不是很规范,不建议这样使用 但是父的...另外上面说返回的基派生的指针或引用也可以是其它继承体系的基派生什么意思呢? 那就是这样 这样也是可以的 不过这个协变可能在实际应用的场景不多。 3....C++11 override 和 final 接下来我们来了解两个C++11的关键字 5.1 final 首先我们来看final关键字,这个关键字什么作用呢?...我们之前继承的那篇文章里其实又提到过final,我们说如果详设计一个不能被继承的,就可以用final。 即用final修饰一个,可使该类变为最终,即不能被继承的 那还有其它作用

8710
领券