前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >缺省参数是编译期间绑定的,而不是动态绑定

缺省参数是编译期间绑定的,而不是动态绑定

作者头像
用户1624346
发布于 2018-04-17 09:30:11
发布于 2018-04-17 09:30:11
1K00
代码可运行
举报
文章被收录于专栏:calmoundcalmound
运行总次数:0
代码可运行

看一个程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

class A
{
public:
	virtual void Fun(int number = 10)
	{
		std::cout << "A::Fun with number " << number<<endl;
	}
};

class B: public A
{
public:
	virtual void Fun(int number = 20)
	{
		std::cout << "B::Fun with number " << number<<endl;
	}
};

int main()
{
	B b;
	A &a = b;
	a.Fun();
	return 0;
}                 //虚函数动态绑定=>B,非A,缺省实参是编译时候确定的=>10,非20 

 输出:B::Fun with number 10 条款38:   决不要重新定义继承而来的缺省参数值  本条款的理由就变得非常明显:虚函数是动态绑定而缺省参数值是静态绑定的。 这意味着你最终可能调用的是一个定义在派生类,但使用了基类中的缺省参数值的虚函数.  为什么C++坚持这种有违常规的做法呢?答案和运行效率有关。如果缺省参数值被动态绑定,编译器就必须想办法为虚函数在运行时确定合适的缺省值,这将比现在采用的在编译阶段确定缺省值的机制更慢更复杂。做出这种选择是想求得速度上的提高和实现上的简便,所以大家现在才能感受得到程序运行的高效;当然,如果忽视了本条款的建议,就会带来混乱。

转载:http://blog.csdn.net/coolingcoding/article/details/8045978

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-08-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【专业技术】C++虚函数的缺省参数
编者按:缺省参数,缺省函数,缺省构造函数,如果你有些迷糊,本文可以让你把它看个清楚。呵呵。 前些日子,有个同学问我一个关于虚函数的缺省参数问题。他是从某个论坛上看到的,但是自己没想通,便来找我。现在分享一下这个问题。先看一小段代码: #include <iostream> using namespace std; class A { public: virtual void Fun(int number = 10) { cout <<
程序员互动联盟
2018/03/14
1.3K0
C++:47---绝不重新定义继承而来的缺省参数值
一、静态类型、动态类型 静态类型:在被声明时所采用的的类型 动态类型:目前所知对象的类型 演示案例 下面是一个继承体系 class Shape { public: enum ShapeColor { Red, Green, Blue }; virtual void draw(ShapeColor color = Red)const = 0; }; class Rectangle :public Shape { public: virtual void draw(ShapeColor color = Gr
用户3479834
2021/02/03
4730
C++:47---绝不重新定义继承而来的缺省参数值
【C++】模板/继承/多态
基类对象 < -派生类对象 类型从下到上的转换(可以) 派生类对象 <- 基类对象 类型从上到下的转换(不可以) 基类指针(引用)<- 派生类对象 类型从下到上的转换(可以) 派生类指针(引用)<-基类对象 类型从上到下的转换(不可以)
洁洁
2024/09/05
1160
【C++】从静态到动态:多态的诗意旅程
https://blog.csdn.net/hsy1603914691/article/details/146056477
风中的云彩
2025/04/01
960
【C++】从静态到动态:多态的诗意旅程
C++:多态
编译时多态主要就是函数重载和函数模板,传递不同类型的参数调用不同的函数,通过参数不同达到多种形态。至于叫做编译时多态的原因,是它们实参传给形参的参数匹配是在编译时完成的。
HZzzzzLu
2024/11/26
980
C++:多态
【C++】看不懂多态?这篇文章带你吃透它!
​ 该内容中的代码以及解释都是在 vs2022 下的 x86 环境中,涉及的指针都是 4 个字节,如果要在其他的平台下运行,部分代码需要改动。
利刃大大
2025/02/03
700
【C++】看不懂多态?这篇文章带你吃透它!
【C++入门】缺省参数、函数重载与引用
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
大耳朵土土垚
2024/04/09
2100
【C++入门】缺省参数、函数重载与引用
多态之魂:C++中的优雅与力量
多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态),这⾥我们重点讲运⾏时多态,编译时多态(静态多态)和运⾏时多态(动态多态)。编译时多态(静态多态)主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时⼀般归为静态,运⾏时归为动态。运⾏时多态,具体点就是去完成某个⾏为(函数),可以传不同的对象就会完成不同的⾏为,就达到多种形态。
用户11286421
2024/11/21
940
多态之魂:C++中的优雅与力量
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本篇文章是继继承之后,博主跟大家介绍面向对象三大特性的最后一个——多态。
ephemerals__
2024/12/25
3700
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
解锁C++多态的魔力:灵活与高效的编码艺术(下)
继上篇解锁C++多态的魔力:灵活与高效的编码艺术(上) 多态性是面向对象编程的重要特性之一,而C++通过虚函数、继承等机制实现了这一强大的功能。多态性使得代码更加灵活和可扩展,允许不同类型的对象以统一的方式进行操作。在本篇文章中,我们将深入探讨C++中多态的实现原理、使用场景及其优劣势,并通过具体代码示例展示如何利用多态来提升代码的可维护性和复用性。
suye
2024/10/20
1210
解锁C++多态的魔力:灵活与高效的编码艺术(下)
C++多态的两种形式
多态(Polymorphisn)是面向对象程序设计(OOP)的一个重要特征。多态字面意思为多种状态。在面向对象语言中,一个接口,多种实现即为多态。C++中的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定使用的接口。运行时多态是动态多态,具体引用的接口在运行时才能确定。
恋喵大鲤鱼
2018/09/27
4.1K1
C++多态的两种形式
C++ —— 关于多态
迷迭所归处
2024/11/19
660
C++ —— 关于多态
从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图
s1mba
2017/12/28
1.2K0
从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图
C++多态虚函数动态绑定
动态绑定是将一个过程调用与相应代码链接起来的行为。是指与给定的过程调用相关联的代码,只有在运行期才可知的一种绑定,它是多态实现的具体形式。
里克贝斯
2021/05/21
1.5K0
C++多态虚函数动态绑定
C++从入门到精通——缺省参数
缺省参数是在函数定义时指定的默认值,当调用函数时未提供该参数的值时,将使用缺省值。使用缺省参数可以简化函数调用,提高代码可读性。但需注意,过多使用缺省参数可能导致代码难以理解和维护。
鲜于言悠
2024/03/30
1630
C++从入门到精通——缺省参数
【C++】缺省参数(默认参数)
如下函数Sum_2,如果函数既有未被指定缺省值的参数,又有被指定缺省值的参数,那么该函数就被称为半缺省参数:
修修修也
2024/04/01
1880
【C++】缺省参数(默认参数)
【多态】—— 我与C++的不解之缘(二十)
注意: 这里返回值基类和派生类的指针或引用,并不是指的该继承关系下的基类和派生类,其他继承关系下的基类和派生类也可以。
星辰与你
2024/12/29
1220
【多态】—— 我与C++的不解之缘(二十)
初谈C++:缺省参数&&函数重载
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
南桥
2024/01/31
1320
初谈C++:缺省参数&&函数重载
【C++】多态
比如我们使用库中的swap与cout输出不同类型的数据时,实际上是调用的不同的函数,但是使用感觉上就是在使用同一个函数,编译器根据输入参数确定要调用或生成的函数
ZLRRLZ
2025/01/02
950
【C++】多态
深入解析【C++多态】:探索面向对象编程中的动态绑定与行为多样性和多态的核心概念与应用实践
多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运⾏时多 态(动态多态),这⾥我们重点讲运⾏时多态,编译时多态(静态多态)和运⾏时多态(动态多态)。编译时 多态(静态多态)主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的 函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在 编译时完成的,我们把编译时⼀般归为静态,运⾏时归为动态。
逆向-落叶
2024/11/20
1330
深入解析【C++多态】:探索面向对象编程中的动态绑定与行为多样性和多态的核心概念与应用实践
推荐阅读
相关推荐
【专业技术】C++虚函数的缺省参数
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验