《C和C++代码精粹》——1.14 默认参数

1.14 默认参数

C和C++代码精粹
在一个函数声明中的默认参数用于指示该函数从它的原型中取值。在程序清单1.16中有一个具有原型的函数:

int minutes(int hrs ,int min=0);

最后一个参数后面的“=0”指示编译器给第二个参数提供值0。当调用minutes函数时,可以省略了该参数。这种机制对定义相应的重载函数来说本质上是一种速记的方法。在这种情况下,前面的语句等价于:

int minutes (int hrs,int min);
int minutes (int hrs); //忽略了minutes

程序清单1.14中的复数构造函数采用了默认参数。允许不带参数或带有1个或2个参数来定义复数,例如:

complex c1;  //(0,0)
complex c2(1);    //(1,0)
complex c3(2,3);    //(2,3)

程序清单1.14中operator+的返回语句正是上面第三个语句。

程序清单1.16 说明默认参数

// minutes.cpp  

#include <iostream>
using namespace std;  

inline int minutes(int hrs, int mins = 0)
{
    return hrs * 60 + mins;
}  

main()
{
    cout << "3 hrs == " << minutes(3) << " minutes" << endl;
    cout << "3 hrs, 26 min == " << minutes(3,26) << " minutes" << endl;
}  

//输出:
3 hrs == 180 minutes
3 hrs, 26 min == 206 minutes

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-09-27 11:05:09

《C和C++代码精粹》——1.14 默认参数的相关文章

《C和C++代码精粹》——2.14 封装和不完全类型

2.14 封装和不完全类型 C和C++代码精粹好的编程习惯能隐藏用户不必知道的执行细节.例如,要执行一个整数栈,可以为用户提供如下的头文件: // mystack.h class StackOfInt ( ) { public: StackOfInt ( ) ; void push ( int ); int pop ( ) ; int top ( ) const; int size ( ) const; private: enum { MAX_STACK = 100 }; int data [

《C和C++代码精粹》导读

前言 C和C++代码精粹 本书适合于那些C和C++的职业程序员.假如你已熟悉这两种语言的语法和基本结构,这本书能够为你创建有效的.实用的程序提供实践性的指导.每一个代码范例或程序范例均标明行之有效的用法和技术,这些用法和技术对C/C++这两种重要编程语言的性能发挥起着重要的作用. 对于那些希望在工作中加强自身技术和提高效率的人来说,本书可以算是一本经验之谈.尽管目前人们对面向对象模式的推崇到了白热状态(本书也包括这方面的丰富内容),可是我没有理由不对C++的基础-C表示尊崇.我发现太多的程序开发

《C和C++代码精粹》——1.10 操纵器

1.10 操纵器 C和C++代码精粹 当标识符 endl出现在一个输出流中时,一个换行字符就被插入并且流被刷新.标识符endl是操纵器的一个例子,即为了副效应而插入到流的一个对象.在〈iostream〉中被声明的系统预定义的操纵器列于表 1.3中.程序清单1.11里的程序在功能上与程序清单1.10的程序等价,但它是用操纵器来代替显式调用setf函数.操纵器经常可以使代码更为高效. 表1.3 简单的操纵器(〈iostream〉) 程序清单1.11 用操纵器改变数据基数 // base2.cpp:

《C和C++代码精粹》——1.2 循序渐进

1.2 循序渐进 C和C++代码精粹 在没有完全掌握C++的情况下也可以有效地使用它.事实上,面向对象技术承诺如果供应商为重用.可扩展性提供设计好的类库,那么建立应用程序的工作就很容易了.现有的开发环境,及其应用程序框架和可视化组件,正在兑现这一承诺. 如果觉得必须要掌握这种语言,可以一步步地去做,并且在这一过程中可以取得丰硕的成果.已出现的3个"顶峰"是: 1.更好的C: 2.数据抽象: 3.面向对象编程. 由于C++比C更安全.更富于表达,所以可以将它作为一个更好的C使用.这个顶峰

《C和C++代码精粹》——第 1 章 更好的C1.1 两种语言简述

第 1 章 更好的C C和C++代码精粹本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接. 1.1 两种语言简述 C和C++代码精粹20世纪80年代初期,C++起源于AT&T,称为带类的 C,当时Bjarne Stroustrup试图用Simula-67编写仿真程序."类"在Simula中是表示用户定义类型的术语,编写好的仿真程序的关键是能够定义对象反映现实世界.除了把类加到C中使其成为最快的过程语言外,还有什么更好的方法可以得到

《C和C++代码精粹》——2.9 字符串数组

2.9 字符串数组 C和C++代码精粹有两种方式来描述C风格的字符串数组:(1)指针数组:(2)二维数组.程序清单2.13中的程序说明了第一种方式.内存分布如下: 程序清单2.13 用指向字符的指针数组来实现字符串 // array6.cpp:粗糙的数组 #include <iostream> #include <cstring> using namespace std; main() { char* strings[] = {"now","is&qu

《C和C++代码精粹》——1.12 运算符重载

1.12 运算符重载 C和C++代码精粹在C++中你可以重载运算符,例如,定义一个复数的数据类型如下: struct complex { double real, imag; }; 假如能使用中缀符号用于复数加法,那将会相当方便.如: complex c1,c2; - complex c3=c1+c2; 当编译器遇到如c1+c2这样的表达式时,将查找下边两个函数中的一个(只须其中的一个存在): operator+(const complex&,const complex &); //全局函

《C和C++代码精粹》——1.8 标准流

1.8 标准流 C和C++代码精粹C++中有4个预定义的流:cin(标准输入),cout(标准输出),cerr(标准错误),clog(标准错误).除了cerr外其余都是全缓冲流.就像stderr一样,cerr的行为好象是非缓冲的,但事实上它是单元缓冲的,也就是说它在处理完每一个对象而不是每一个字节后会自动清除缓冲.例如,带有单元缓冲的语句: cerr<<"hello":缓冲处理5个字符,然后清除缓冲区.一个非缓冲处理的流会立即发送每个字符到它的最终目的地. 程序清单1.5

《C和C++代码精粹》——1.18 C的兼容性

1.18 C的兼容性 C和C++代码精粹为了提供强类型检查和面向对象, C++不得不在一些语言方面与C不同.如果要把C++作为更好的C使用,就必须留意两种语言间的不同特性. 程序清单1.18 说明复数模板 #include <iostream> #include <complex> using namespace std; main() { complex<double> x(1.0, 2.0), y(3.0, 4.0); cout << "x +