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

条款24:在函数重载(function overloading)和参数缺省化(parameter defaulting)之间,谨慎抉择

阅读更多
1,引起混淆基于一个事实:他们都允许以不同的形式调用同一个函数名称。
如:
void f();                             // f is overloaded

void f(int x);

f();                                  // calls f()

f(10);                                // calls f(int)



void g(int x = 0);                    // g has a default

                                      // parameter value

g();                                  // calls g(0)

g(10);                                // calls g(10)

2,应该使用哪个,答案取决于两个方面:
(1)是否有适当的值可以用来作为缺省参数。
(2)希望使用多少个算法.
如果可以选择合理的默认值,而且你需要一个算法,那么最好使用缺省函数。

3,举例
(1)缺省函数的版本:返回最多5个数的最大值
只需要一个即可:
int max(int a,

        int b = std::numeric_limits<int>::min(),

        int c = std::numeric_limits<int>::min(),

        int d = std::numeric_limits<int>::min(),

        int e = std::numeric_limits<int>::min())

{

int temp = a > b ? a : b;

temp = temp > c ? temp : c;

temp = temp > d ? temp : d;

return temp > e ? temp : e;

}
(2)如果没有合适的默认值,只能使用函数重载:返回最多5个整数的平均值。
double avg(int a);

double avg(int a, int b);

double avg(int a, int b, int c);

double avg(int a, int b, int c, int d);

double avg(int a, int b, int c, int d, int e)

4,另外一种必须使用函数重载的情况:采用的算法视输入而定.
如:构造函数和拷贝函数
class Natural
{

public:

Natural(int initValue);

Natural(const Natural& rhs);

private:

unsigned int value;

void init(int initValue);

void error(const string& msg);

};

inline

void Natural::init(int initValue) { value = initValue; }

Natural::Natural(int initValue)

{

if (initValue > 0) init(initValue);

else error("Illegal initial value");

}

inline Natural::Natural(const Natural& x)

{ init(x.value); }
//私有成员函数init,避免两个constructors内部部分代码重复。
分享到:
评论

相关推荐

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

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

    实验二:友元和函数重载

    在C++编程语言中,友元(Friend)和函数重载(Function Overloading)是两个重要的概念,它们分别增强了类的封装性和灵活性。本实验旨在通过实际操作让你深入理解这两个特性,并能综合运用到实际编程中。 **一、...

    JS-Function-Overloading:JS函数重载

    3. 默认参数和剩余参数:ES6引入了默认参数和剩余参数,这使得我们可以创建更灵活的函数,它们可以接受不同数量或类型的参数。例如: ```javascript function sum(...numbers) { return numbers.reduce((total, ...

    C++语言函数重载的基本语法.zip

    在C++编程语言中,函数重载(Function Overloading)是一项重要的特性,它允许在同一作用域内使用相同的名字定义多个函数,但这些函数的参数列表必须有所不同,即通过不同的参数类型、数量或顺序来区分不同的函数。...

    函数重载和覆盖的区别.doc

    在编程领域,函数重载(Overloading)和覆盖(Overriding)是两种常见的多态性实现方式,它们允许程序员在代码中创建更加灵活和复用性强的功能。尽管两者名称相似,但它们之间有着本质的区别。本文将详细探讨函数...

    对C++编译器区分重载函数无任何意义的信息是 A.参数类型B.参数个数.docx

    参数个数”以及描述部分的内容来看,本文将深入探讨C++编程语言中关于函数重载(overloading)的概念及其关键要素,并明确指出在C++编译器如何识别不同重载函数时哪些因素是有意义的。 ### C++函数重载概述 #### ...

    软件设计课件:Lecture 07 C Operator Overloading.ppt

    重载的运算符函数与其他函数定义相似,包括返回类型和参数列表,但函数名称前会加上关键字`operator`,后面跟着要重载的运算符符号。例如,为了重载加法运算符`+`,我们会定义一个名为`operator+`的函数。 除了加法...

    C++函数的重载和覆盖

    在C++编程语言中,函数的重载(Overloading)和覆盖(Overriding)是两个重要的概念,它们分别涉及到同一作用域内的多态性和继承体系中的多态性。本篇文档将深入探讨这两个主题,帮助你更好地理解和运用它们。 ### ...

    Function_Overloading_Illustration.rar_C Builder

    在C++编程语言中,函数重载(Function Overloading)是一项重要的特性,它允许我们在同一个作用域内定义多个同名但具有不同参数列表的函数。这样做的好处是能够为相似的操作提供简洁且易于理解的接口,同时提高了...

    重载函数实现变量排序问题

    1. **函数重载(Function Overloading)**:在C++中,允许在同一作用域内声明几个函数名相同而参数表不同的函数,称为重载函数。这些函数被称为重载函数。编译器根据传递给函数的参数类型来决定调用哪个版本的函数。...

    b函数与运算符的重载PPT课件.pptx

    在C++编程语言中,函数重载(Function Overloading)和运算符重载(Operator Overloading)是两个关键的特性,它们允许程序员根据需要为相同名称的函数或运算符提供不同的实现,从而增加代码的可读性和灵活性。...

    重载函数相关知识

    重载函数(Function Overloading)解决了函数名称冲突的问题,同时也提高了代码的可读性和复用性。 ### 为什么需要重载函数? 在开发过程中,我们经常需要处理不同类型的输入数据,而这些数据可能需要进行相似的...

    C++ 函数重载 运算符重载 类型转化

    在C++编程语言中,函数重载(Overloading)和运算符重载(Overloading)是两种关键的多态性实现方式,而类型转化(Type Conversion)则涉及到数据类型的转换和兼容性问题。这些概念是C++程序员必备的知识点,理解和...

    第十章运算符重载复习题.doc

    函数重载(Function Overloading)是C++编程语言的一种特性,允许开发者定义多个同名函数,但参数列表不同。这个功能使得开发者可以根据不同的参数列表选择合适的函数来调用。 七、函数重载的应用 函数重载可以...

    java中函数重载与覆盖例子

    在Java编程语言中,函数重载(Overloading)和覆盖(Overriding)是面向对象特性的重要组成部分,它们分别处理多态性中的静态多态和动态多态。本篇将通过一个具体的例子,深入探讨这两个概念。 函数重载是指在同一...

    函数重载的重要性不言而明.docx

    函数重载(Function Overloading)是指在同一作用域内,使用相同的函数名称,但参数列表不同(包括参数的类型、数量或顺序)。这种情况下,编译器能够根据传入的实际参数类型自动选择正确的函数进行调用。例如,在...

    软件设计课件:Lecture 07 C++ Operator Overloading.ppt

    这需要我们编写一个函数,该函数的名称以`operator+`开头,并指定合适的参数列表和返回类型。 ```cpp class Point { public: Point(int xx=0, int yy=0) : x(xx), y(yy) {} int getX() const { return x; } int ...

    17_函数的重载

    在编程语言中,函数的重载(Overloading)是一个重要的概念,它允许我们在同一个作用域内定义多个同名函数,但这些函数的参数列表必须不同。这样做的目的是为了解决同一操作可以应用于不同类型数据的问题,使得代码...

    函数重载学生类 c++

    在C++编程语言中,函数重载(Function Overloading)是一种重要的特性,它允许在同一作用域内使用相同的名字但参数列表不同的多个函数。这在处理类似功能但处理数据类型或参数数量不同的情况时非常有用。在"学生类...

Global site tag (gtag.js) - Google Analytics