虚函数的限制及多态性的有效范围

C++ 面试题 -- 多态发生的条件 C++多态产生的条件 这个C++多态产生的条件进行简短总结,方便以后温习,C++ 的多态实现的底层原理可以参考《C++虚函数表解析》 https://blog.csdn.net/u010154685/article/details/51816615 多态发生的条件主要有3个: (1)具有虚函数的类中,每一个类都会有至少一个虚表,多继承的话字类具有多个虚表(与继承的父类个数一样),父类具有自... 阅读详情
 一、虚函数的限制:

    大家知道,一般说来可以将类层次中的具有共性的成员函数声明为虚函数,而个性的函数只有某一个类具有,没有必要声明为虚函数,但我觉得还是有些特例情况:

1、静态成员不能声明为虚函数。因为静态成员不属于某一个对象,没有多态性的特征。

2、内联成员函数不能声明为虚函数。因为内联函数的执行代码明确的,没有多态性的特征,即使对那些在类声明时就定义内容的成员函数,若已声明为虚函数,此时函数仍是非内联形式,而以多态性出现。

3、构造函数不能是虚函数。构造函数在对象创建时调用,完成对象的初始化,此时对象还没有完全建立,所以,对构造函数声明为虚函数是没有意义的。

4、析构函数可以是虚函数,而且通常被声明为虚函数。由于实施多态性时是通过将基类的指针指向派生类的对象,如果删除该指针,就会调用该指针指向的派生类的析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象就被完全释放。因此,析构函数常被声明为虚函数。

二、多态性的有效范围:

    在类的成员函数被声明为虚函数后,派生类就具有多态性。但如果仅仅是基类和派生类成员函数的名字相同,而参数的类型不同,或者函数的返回值不同,即使声明为虚函数,派生类的函数也不具备多态性。
网络可视媒体的智能计算-胡事民 本文为胡事民教授在山大做报告的笔记,现场见下图: 可视媒体是承载视觉信息的媒体类型,如图像、视频等,它具有网络化、海量和无序涌现等特征。 可视媒体计算的研究意义 可视媒体作为一种信息承载的介质,是用来表达语义信息的。那么就有一种介质与信息之间相互转化的问题。转化方向正反两种,举个栗子说明一下: 1. 可视媒体→→\rightarrow语义信息:比如看到画面,理解其中发生的事件、各主题之... 阅读详情

相关推荐

最新Python爬虫实战(入门爬虫篇)——案例7:电影网站电影数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过Python爬虫技术,成功实现了对某电影网站Top250多页电影详细信息的批量爬取与Excel保存。代码采用模块化设计,包含分页请求构造、XPath+正则提取结构化信息、Excel数据持久化保存等完整流程。通过配置User-Agent等请求头信息,有效模拟浏览器行为以绕过豆瓣基础反爬策略。整个爬虫逻辑遵循"分页遍历 → 请求页面 → 解析HTML → 提取电影信息 → 保存到Excel"的标准流程,与主流静态网站爬取范式高度一致。

努力让自己发光,对的人才能迎着光而来 11万+

C++的虚函数相关知识点(二)

2. 以下几种情况下虚函数的特性将失效1)派生类没有重写该函数;2)使用基类对象(包括将派生类强制转换成基类对象)调用虚函数;示例代码如下://使用基类对象不能实现动态性 #include class base { public: virtual void who(){cout who();//这里是通过基类指针调用的,会动态绑定 ((base)obj).who();//这里是通过一个临时基类对象调用的虚函数,这时虚函数与普通的调用规则相同。 }其运行结果如下:This is deriv

杨勇的专栏 849

万能数字型彩票合并分解

万能数字型彩票合并分解可以支持不同类型的输入位置文本!也就是可以同时合并1D位置2D位置3D位置4D位置。这样不同类型的位置文本。而且合并速度是非常快的!

虚函数常见问题

对于多重继承,如果类定义了虚函数,该类及其派生类就要生成一张虚拟函数表。如下继承关系(没有覆盖): 在子类Derive实例中的虚函数表: 子类自己定义的虚函数会被放到了第一个基类的虚函数表中。 如果子类重写了基类的虚函数,则在虚函数表中,子类函数会覆盖相应的基类函数: 以上继承重写了f()函数,子类实例的虚函数表变为: 测试: C/C++ code

fdsafwagdagadg6576的专栏 2090

虚函数限制

1.static成员函数不能虚函数 虚函数存在于有继承关系的类的对象中,在派生类中覆盖了基类的虚函数,实现了动态绑定。通过基类的指针或引用调用派生类版本。 static成员函数在继承关系中只存在一份。是属于类的,而不受限于某个对象,不存在this指针。在派生类中的继承的static函数和基类是一个函数。因此~。 2.inline成员函数不能虚函数 函数的inline属...

a647186998872097的博客 245

C++学习六:多态、虚函数虚函数限制、成员函数覆盖,隐藏,重载、动态链接、虚函数表、抽象类、纯虚函数、虚继承、虚析构函数、限制构造函数

多态、虚函数虚函数限制、成员函数覆盖,隐藏,重载、动态链接、虚函数表、抽象类、 纯虚函数、虚继承、虚析构函数、限制构造函数

only_write_bug的博客 1134

对于虚函数限制多态性有效范围

一、虚函数限制: 大家知道,一般说来可以将类层次中的具有共性的成员函数声明为虚函数,而个性的函数只有某一个类具有,没有必要声明为虚函数,但我觉得还是有些特例情况: 1、静态成员函数不能声明为虚函数。因为静态成员不属于某一个对象,没有this指针,没有多态性的特征。 2、内联成员函数不能声明为虚函数。因为内联函数的执行代码明确的,没有多态性的特征,即使对那些在类声明时就定义内容的

享受开发技术,享受计算机科学 806

全局变量,继承,虚函数,构造函数和析构函数的调用过程

/*全局变量,继承,虚函数,构造函数和析构函数的调用过程。。。///百度里发现的一个好贴,不敢独自享用,分享一下。。。*/ #include class Value { public:  Value(int  nVal)  {   m_nVal = nVal;   printf("Call Value::Value(int nValue)\n");  }  ~Value(

yanziguilai的专栏 1452

学习笔记之C++

关于c++编程语言的学习笔记整理

qq_41323475的博客 454

C++期末复习(自用)

C++期末复习主要知识点指针功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 主要知识点 C++期末需要掌握的知识点,根据复习要点总结。 指针 一级、二级指针的定义和基本操作 一级指针:指向变量 二级指针:指向一级指针 int a

m0_52008433的博客 789

面向对象特征三:多态性

面向对象特征三:多态性一、多态性是什么?二、多态的使用1.虚拟方法调用2.多态性的使用前提3.多态性限制总结:方法的重载与重写 一、多态性是什么? 子类的对象赋给父类的引用 可以理解为一个事物的多种形态。 public class PersonTest { public static void main(String[] args) { Person p1 = new Person(); p1.age = 34; p1.name = "熊"; Man man = new M

is_yaoyao的博客 187

八、三大特性~多态

多态定义:父类指针指向子类对象 多态的好处:如果参数中使用的是父类类型,可以传入父类、子类对象 多态的限制:父类类型的变量,不能用来调用子类特有的方法 对象类型强制转换:将aa转为Dog *类型的变量,转变后编译器不会警告 Animal *aa = [Dog new]; Dog *dd = (Dog *)aa;

磨刀者的专栏 271

三大特性_多态

多态: 多态的好处和限制: 调用: 若还有一个喂动物的函数: void feed(Animal *a){ [a eat];//eat方法在之前的Animal类中已经声明并实现 } int main(){ ——Animal *a=[Cat new];//可以,Cat是Animal ——Cat *c1=[Cat new];//可以 ——Cat *c2=[Dog new];/

kldxcr的专栏 878

虚函数

虚函数 重载:相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。 程序在编译阶段根据参数个数确定调用哪个函数。这种情况叫做静态多态(早绑定),一般用函数重载实现 如果要想实现动态多态则必须使用虚函数虚函数用关键字 virtual声明 虚函数可能造成内存泄漏,因为如果delete后边跟父类的指针则只会执行父类的析构函数,如果delete后面跟的是子类的指针,那么它即会执行子类的...

xiangxianghehe的博客 271

声明虚函数限制...

【1】只能用virtual声明类的成员函数,使它成为虚函数,而不能将类外的普通函数声明为虚函数。   【2】一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同参数(个数与类型)和函数返回值类型的同名函数。   【3】静态成员函数不能虚函数,因为静态成员函数不受限于某个对象。   【4】inline函数不能虚函数,因为inline函数是不能在运行中动态确定其位置的。即使虚函数在类的内部定义,编译时,仍将其视为非inline的。

CNnumen 835

它们,不能虚函数!!!

有些函数是不能作为虚函数的,详细是哪些?之前也没总结过,如今梳理一下! 作为虚函数的函数,必须是类的成员函数。且具有继承性。 1.非类的成员函数,即 普通函数 它们没有继承性,即便声明为虚函数,也毫无意义。 2.构造函数 首先,构造函数是不可以被继承的,自然就不能声明为虚函数 其次。构造函数是用来运行初始化的,虚函数是用来实现多态性的。若尚未构造出来,怎...

weixin_34186128的博客 130

C++虚函数原理及其使用限制

虚函数的原理 默认情况下,子类的数据表中有一个虚函数表指针,其保存着虚函数表的地址。 一般情况下,子类没有重写父类的成员函数,则子类的虚函数表指针指向的是父类的虚函数表。 若子类中有重写父类的成员函数,则子类中的虚函数表指针会重新定向到自己的虚函数表的位置,因此执行的虚函数位置也是子类的虚函数位置。 只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。那么

sunSHINEEzy的博客 603

java多态方法调用_使用Java多态性限制对方法调用的访问

我有这样的情况:public class BaseClass {protected void protectedMethod(OtherObject object) {...}}public class Child1 extends BaseClass {@Overrideprotected void protectedMethod(OtherObject object) {super.prote...

weixin_39610678的博客 160

OC多态详解

1、多态(多种形态)。实现多态的前提是实现继承,没有继承就没有多态。因为多态的体现形式就是父类指针指向子类对象。常用这种方式:父类名 *p=[子类名 new]; 2、利用多态,指向子类对象的父类指针能直接调用子类中重写父类的方法。当给指向子类对象的父类指针发送消息时,系统会启动动态检测来判断对象的真实类型,进而调用这个真实类型的方法。 3、多态的好处:首先在一个函数中有一个父类指针类型的形...

iteye_18817的博客 362

钱能C++语言读书笔记(六)虚函数限制

虚函数限制1、只有类成员函数才能声明为虚函数。这是因为虚函数仅适用于有继承体系的类对象,所以普通函数不能声明为虚函数。2、静态成员函数不能虚函数。因为静态成员函数不受对象的捆绑,即使形式上的捆绑。实际上也没有任何对象的信息,只有类的信息:void fn(Base & x) { x.Staticfn(); //只用了类的信息。 Base::Staticfn(); //调用静态成员的推荐方式。 } 操作不受对象捆绑,也就失去了多态的条件。因为编译是在识别到对象的捆绑操作时,开

个人独立博客http://www.acb0y.cn/ 945
上一篇: C++对象内存布局测试总结
下一篇: RAII惯用法:C++资源管理的利器
a199228
博客等级 码龄15年 92粉丝 57原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值