1,首先可以安全的把问题讨论局限于"继承一个带有缺省参数的虚拟函数"
那么理由非常直接明了:
虚拟函数系动态绑定,而缺省参数却是静态绑定.
实例代码:
#include <iostream>
#include <string.h>
using namespace std;
enum ShapeColor { RED, GREEN, BLUE };
// a class for geometric shapes
class Shape
{
public:
virtual void draw(ShapeColor color = RED)
{
cout << "Shape:" << color << endl;
}
};
class Rectangle: public Shape
{
public:
virtual void draw(ShapeColor color = GREEN) const
{
cout << "Ractangle:" << color << endl;
}
};
int main()
{
Shape* pb1 = new Shape;
pb1 -> draw();
Shape* pb2 = new Rectangle;
pb2 -> draw(); //基类默认
Rectangle* pb3 = new Rectangle;
pb3 -> draw(); //派生类默认
return 0;
}
注意:pb2 -> draw(); //基类默认
当你调用一个定义在Derived class内的虚拟函数时,却使用基类为它指定的缺省参数值.
2,C++为啥要坚持这么运作捏?
答案:又是执行时的效率.
如果缺省参数也是动态绑定,编译器就必须通过某种办法在执行时期为虚拟函数决定适当的缺省参数值.这样的机制更慢更复杂.
分享到:
相关推荐
决不要重新定义继承而来的缺省参数值,由权威的Effective C++讲述!
条款38: 决不要重新定义继承而来的缺省参数值 条款39: 避免 "向下转换" 继承层次 条款40: 通过分层来体现 "有一个" 或 "用...来实现" 条款41: 区分继承和模板 条款42: 明智地使用私有继承 条款43: 明智地使用多继承 ...
条款38:绝不要重新定义继承而来的缺省参数值 条款39:避免向下转换继承层次 条款40:通过分层来体现有一个和用...来实现 条款41:区分继承和模板 条款42:明智的使用私有继承 条款43:明智的使用多继承 条款44:说你想说的...
条款37:绝不重新定义继承而来的缺省参数值 条款38:通过复合塑模出has-a或“根据某物实现出” 条款39:明智而审慎地使用private继承 条款40:明智而审慎地使用private继承 7.模板与泛型编程 8.定制new和delete...
条款37:绝不重新定义继承而来的缺省参数值 never redefine a function's inherited default parameter value. 条款38:通过复合塑模出has-a或“根据某物实现出” model “has-a” or “is-implemented-in-terms-of...
经常看到函数定义时有好多参数,但实际调用时却只用到其中几个参数,研究老半天终于明白了
c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数
Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于Java、C和JavaScript之上,真的非常荣幸了. 自从20世纪90年代初Python语言诞生至2022年,它已被逐渐广泛应用于系统...
·条款三:不要使用多态性数组 ·条款四:避免无用的缺省构造函数 ·条款五:谨慎定义类型转换函数 ·条款六:自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别 ·条款七:不要...
该源码的主要功能:用C来实现带有缺省参数的函数,风格规范,功能齐全,能深入理解指针的强大性以及函数printf神奇的背后。
C++类和对象练习 构造函数 复制构造函数 缺省参数列表
Stata数据分析过程中,首先需要对数据进行清洗。数据集的缺省项会导致数据分析严重失真。数据清理过程中,有必要对缺省值进行查漏补缺或删除处理。这里介绍三种最简单的处理方法。
全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...
一个简易的Money运算程序。定义一个Money类:缺省函数,重载运算符
全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...
Calini文件为手机校准之前的缺省参数PPT学习教案.pptx
Calini文件为手机校准之前的缺省参数PPT教学课件.pptx
精彩编程与编程技巧-缺省值和可选参数 ...
python数据分析与可视化-25-缺省参数.ev4.rar
Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于Java、C和JavaScript之上,真的非常荣幸了. 自从20世纪90年代初Python语言诞生至2022年,它已被逐渐广泛应用于系统...