`
kmplayer
  • 浏览: 509916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款38:绝对不要重新定义继承而来的缺省参数值

阅读更多
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++为啥要坚持这么运作捏?
答案:又是执行时的效率.
如果缺省参数也是动态绑定,编译器就必须通过某种办法在执行时期为虚拟函数决定适当的缺省参数值.这样的机制更慢更复杂.
分享到:
评论

相关推荐

    决不要重新定义继承而来的缺省参数值

    ### 决不要重新定义继承而来的缺省参数值 在C++编程中,遵循最佳实践对于维护代码质量和可预测性至关重要。本篇文章聚焦于“决不要重新定义继承而来的缺省参数值”的原则,该原则出自权威指南《Effective C++》。...

    Effective.C++.中文第二版.50条款doc文档.chm

    条款38: 决不要重新定义继承而来的缺省参数值 条款39: 避免 "向下转换" 继承层次 条款40: 通过分层来体现 "有一个" 或 "用...来实现" 条款41: 区分继承和模板 条款42: 明智地使用私有继承 条款43: 明智地使用多继承 ...

    函数参数缺省与重载,命名和缺省规则

    例如,一个类可能需要一个默认构造函数来创建未初始化的对象,而另一个构造函数可能接受一个字符串参数来从文件中读取数据初始化对象。这样的重载不仅限于构造函数,也可以应用到一般的成员函数和非成员函数,使得库...

    Effective C++ 中文版

    条款37:绝不重新定义继承而来的缺省参数值 条款38:通过复合塑模出has-a或“根据某物实现出” 条款39:明智而审慎地使用private继承 条款40:明智而审慎地使用private继承 7.模板与泛型编程 8.定制new和delete...

    Effective C++(第三版)

    条款37:绝不重新定义继承而来的缺省参数值 never redefine a function's inherited default parameter value. 条款38:通过复合塑模出has-a或“根据某物实现出” model “has-a” or “is-implemented-in-terms-of...

    c++之第五函数重载与缺省参数

    在C++编程语言中,函数重载(Overloading)和缺省参数(Default Arguments)是两个重要的特性,它们极大地增强了代码的灵活性和可读性。本文将深入探讨这两个概念及其在实际编程中的应用。 首先,函数重载允许我们...

    Python 缺省参数-指定函数缺省参数的默认值

    Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于Java、C和JavaScript之上,真的非常荣幸了. 自从20世纪90年代初Python语言诞生至2022年,它已被逐渐广泛应用于系统...

    EffectiveC++ and more Effective C++

     ·条款三:不要使用多态性数组  ·条款四:避免无用的缺省构造函数  ·条款五:谨慎定义类型转换函数  ·条款六:自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别  ·条款七:不要...

    python数据分析与可视化-25-缺省参数.ev4.rar

    缺省参数在函数定义中通过等号 (=) 后面跟随默认值来设置。例如,以下是一个简单的函数,它接受一个参数 `x`,并有一个默认值 `10`: ```python def add_number(x=10): return x + 5 ``` 在这个例子中,即使我们...

    精彩编程与编程技巧-缺省值和可选参数...

    ### 缺省值和可选参数在编程中的应用 #### 缺省值和可选参数的概念 在编程语言中,函数或方法可以接受一个或多个参数。为了提高代码的灵活性和可读性,许多现代编程语言支持指定参数的缺省值,即在调用时如果没有...

    实现缺省参数的函数Printf

    在实现带缺省参数的`Printf`时,开发者可能需要创建自己的版本来处理各种类型的数据,比如定义一个结构体来存储参数列表,然后在函数体内根据格式字符串解析并处理这些参数。这涉及到了指针的使用,因为参数列表通常...

    cpp 缺省参数课堂笔记

    cpp 缺省参数课堂笔记

    python 函数的缺省参数使用注意事项分析

    首先,了解参数定义的顺序是非常重要的。在Python中定义函数时,参数的顺序必须遵循以下规则:首先列出所有的必选参数,接着是缺省参数,之后是可变长参数(用*args表示),最后是关键字参数(用**kwargs表示)。...

    人员类 c++(构造函数 复制构造函数 缺省参数列表)

    C++类和对象练习 构造函数 复制构造函数 缺省参数列表

    python函数声明和调用定义及原理详解

    函数的声明定义了函数的输入、处理逻辑和输出,而调用则是利用这些定义,通过传入参数来执行函数内部代码的过程。在了解了这些基本概念和原理之后,就可以更好地掌握Python的编程技巧,编写出更加高效和优雅的代码。

    Effective C++

    8. **条款8:以对象而非原始类型作为函数参数** - 使用对象而不是基本类型可以隐藏实现细节,增强封装性,还可以利用C++的类型系统来防止错误。 9. **条款9:优先使用引用来传递大型对象** - 对于大对象,传递引用...

    定义一个Money类:缺省函数,重载运算符

    在本实验中,我们需要定义一个`Money`类来表示货币金额。此类的主要目的是存储和处理货币值,特别是涉及元、角、分的计算。 - **类成员变量**: - `int yuan;`:表示金额中的元部分。 - `int jiao;`:表示金额中...

Global site tag (gtag.js) - Google Analytics