C++:构造函数的默认参数知识拓展

时间:2023-02-27 07:55:38
和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。
 
例9.3的问题也可以使用包含默认参数的构造函数来处理。
 
【例9.4】将例9.3程序中的构造函数改用含默认值的参数,长、宽、高的默认值均为10。
#include <iostream>
using namespace std;
class Box
{
   public :
   Box(int h=10,int w=10,int len=10); //在声明构造函数时指定默认参数
   int volume( );
   private :
   int height;
   int width;
   int length;
};
Box::Box(int h,int w,int len) //在定义函数时可以不指定默认参数
{
   height=h;
   width=w;
   length=len;
}
int Box::volume( )
{
   return (height*width*length);
}
int main( )
{
   Box box1; //没有给实参
   cout<<"The volume of box1 is "<<box1.volume( )<<endl;
   Box box2(15); //只给定一个实参
   cout<<"The volume of box2 is "<<box2.volume( )<<endl;
   Box box3(15,30); //只给定2个实参
   cout<<"The volume of box3 is "<<box3.volume( )<<endl;
   Box box4(15,30,20); //给定3个实参
   cout<<"The volume of box4 is "<<box4.volume( )<<endl;
   return 0;
}
程序运行结果为:
The volume of box1 is 1000
The volume of box2 is 1500
The volume of box3 is 4500
The volume of box4 is 9000
 
程序中对构造函数的定义(第12-16行)也可以改写成参数初始化表的形式:
    Box::Box(int h,int w,int len):height(h),width(w),length(len){ }
 
可以看到,在构造函数中使用默认参数是方便而有效的,它提供了建立对象时的多种选择,它的作用相当于好几个重载的构造函数。
 
它的好处是,即使在调用构造函数时没有提供实参值,不仅不会出错,而且还确保按照默认的参数值对对象进行初始化。尤其在希望对每一个对象都有同样的初始化状况时用这种方法更为方便。
 
关于构造函数默认值的几点说明:
1、应该在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值。
2、程序第5行在声明构造函数时,形参名可以省略。
3、如果构造函数的全部参数都指定了默认值,则在定义对象时可以给一个或几个实参,也可以不给出       实参。
4、在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。
 
 
 

C++:构造函数的默认参数知识拓展的更多相关文章

  1. &lbrack;c&plus;&plus;&rsqb; 子类构造函数中有默认参数

    子类创建对象时调用父类的构造函数: 1 #include <iostream> 2 using namespace std; 3 class Base 4 { 5 public: 6 Ba ...

  2. C&plus;&plus;构造函数重载以及默认参数引起的二义性

    大家都知道当我们声明一个类时,系统会提供一个默认构造函数.当我们需要提供参数进行对类数据成员进行初始化时,就需要对类的带参构造函数进行重载.同时,如果我们需要调用默认构造函数进行类数据成员的初始化时, ...

  3. C&plus;&plus;入门经典-例4&period;2-调用默认参数的函数

    1:代码如下: // 4.2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  4. C&plus;&plus;中关于重载默认构造函数与默认全部参数的构造函数的使用注意

    # include<iostream>using namespace std;class Time{public:                            //公用成员函数  ...

  5. 2&period;9 C&plus;&plus;使用默认参数的构造函数

    总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...

  6. C&plus;&plus;使用默认参数的构造函数

    我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常老的书,为了尽快清空库存,店主想了一下,决定开展一个大甩卖活动,所有的这些书全部以五美元的价格出售.此时如果需要尽快将这些书的信息录入到书 ...

  7. C&num;深入学习笔记 - 可空类型与构造函数默认参数

    在实际开发中或许可能会遇到某个属性需要提供一个默认参数,如果该参数是引用类型的话,可以通过 使用 null 来表示未知的值,但如果是int或 其他值类型的话就有点不好办了,因为如果需要一个int或fl ...

  8. C&plus;&plus;对C的函数拓展 - 默认参数

    1 C++中可以在函数声明时为参数提供一个默认值, 当函数调用时没有指定这个参数的值,编译器会自动用默认值代替 void myPrint(int x = 3) { printf("x:%d& ...

  9. C&plus;&plus;对C语言的拓展(3)—— 默认参数和占位参数

    通常情况下,函数在调用时,形参从实参那里取得值.对于多次调用同一函数同一 实参时,C++给出了更简单的处理办法.给形参以默认值,这样就不用从实参那里取值了. 1.单个默认参数 若填写参数,使用你填写的 ...

随机推荐

  1. Ubuntu 安装 CLI 并运行 ASP&period;NET Core 1&period;0

    Ubuntu 下载地址:http://www.ubuntu.org.cn/download/desktop 注:目前 CLI 的安装命令只支持 Ubuntu 14.04,暂不支持 Ubuntu 14. ...

  2. IS&lowbar;POST&colon;判断是否存在POST提交

    IS_POST:判断是否存在POST提交 在程序中可以使用IS_POST来做优化..如果有提交.我们再执行下一步动作.节省开销

  3. DuiLib(三)——控件消息

    上一篇讲了控件创建,这篇说说控件消息.directui的中心思想是在真实窗口之上画出所有控件,那这些控件是如何获取各自消息的? 通过第一篇的示例可以看到窗口消息的传递过程: CWindowWnd::_ ...

  4. HTML5十五大新特性

    HTML5想必大家都很熟悉了.然而,你能准确地说出HTML5带来了哪些新特性吗?本文总结了HTML5带来的15项你必须知道的新特性. 一起来看下: 1.新的文档类型  (New Doctype) 目前 ...

  5. jquery的插件机制

    jQuery的内核; (function( window, undefined ) { //这就是jQuery的原型 var jQuery = function( selector, context ...

  6. jsp页面禁用缓存

    问题:为什么禁用JSP页面缓存 就是为了得到实时信息 怎样禁用JSP页面缓存 1.在JSP页面设置 <meta http-equiv="pragma" content=&qu ...

  7. linux统计cdn日志慢请求

    ./stat_ip.sh live-https.log-0510.gz 1000 #首先用shell脚本可以统计出?日志慢请求查询时间超过?秒对应的ip和对应的调用次数(传两个参数) #!/bin/b ...

  8. 基本标签-html-1

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. CentOS 7&period;4安装Nginx 1&period;14&period;0

    一.安装所需环境   1.gcc 安装         yum install gcc-c++    

  10. the cause of StringBuild class

    如果我们对字符串进行拼接操作,每次拼接,都会创建一个新的String对象,既耗时,又浪费空间,而StringBuild类可以解决这个问题. 那么StringBuild类是如果解决的呢? 因为Strin ...