• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 解析C++中构造函数的默认参数和构造函数的重载

解析C++中构造函数的默认参数和构造函数的重载

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++构造函数,c++构造函数初始化,c++构造函数作用,c++拷贝构造函数,c++复制构造函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C++构造函数的默认参数

和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。

【例】

#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;
}
</div>

程序运行结果为:

The volume of box1 is 1000
The volume of box2 is 1500
The volume of box3 is 4500
The volume of box4 is 9000
</div>

程序中对构造函数的定义(第12-16行)也可以改写成参数初始化表的形式:

  Box::Box(int h,int w,int len):height(h),width(w),length(len){ }
</div>

可以看到,在构造函数中使用默认参数是方便而有效的,它提供了建立对象时的多种选择,它的作用相当于好几个重载的构造函数。

它的好处是,即使在调用构造函数时没有提供实参值,不仅不会出错,而且还确保按照默认的参数值对对象进行初始化。尤其在希望对每一个对象都有同样的初始化状况时用这种方法更为方便。

关于构造函数默认值的几点说明:
应该在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值。
程序第5行在声明构造函数时,形参名可以省略。
如果构造函数的全部参数都指定了默认值,则在定义对象时可以给一个或几个实参,也可以不给出实参。
在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。

C++构造函数的重载
在一个类中可以定义多个构造函数,以便提供不同的初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。这称为构造函数的重载。

通过下面的例子可以了解怎样应用构造函数的重载。

【例】定义两个构造函数,其中一个无参数,一个有参数。

#include <iostream>
using namespace std;
class Box
{
  public : Box( ); //声明一个无参的构造函数
  //声明一个有参的构造函数,用参数的初始化表对数据成员初始化
  Box(int h,int w,int len):height(h),width(w),length(len){ }
  int volume( );
  private :
  int height;
  int width;
  int length;
};
Box::Box( ) //定义一个无参的构造函数
{
  height=10; width=10; length=10;
}
int Box::volume( ){
  return (height*width*length);
}
int main( )
{
  Box box1; //建立对象box1,不指定实参
  cout<<"The volume of box1 is "<<box1.volume( )<<endl;
  Box box2(15,30,25); //建立对象box2,指定3个实参
  cout<<"The volume of box2 is "<<box2.volume( )<<endl;
  return 0;
}
</div>

在本程序中定义了两个重载的构造函数,其实还可以定义其他重载构造函数,其原型声明可以为:

  Box::Box(int h); //有1个参数的构造函数
  Box::Box(int h,int w); //有两个参数的构造函数
</div>


在建立对象时分别给定1个参数和2个参数。

关于构造函数的重载的几点说明:
调用构造函数时不必给出实参的构造函数,称为默认构造函数(default constructor)。显然,无参的构造函数属于默认构造函数。一个类只能有一个默认构造函数。
如果在建立对象时选用的是无参构造函数,应注意正确书写定义对象的语句。
尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 构造函数中使用new时注意事项
  • C++ 赋值构造函数注意点介绍
  • 关于C++中构造函数初始化成员列表的总结
  • C++ 初始化列表详解及实例代码
  • c++ 构造函数中调用虚函数的实现方法
  • C++ 类的构造函数详解及实例
  • C++构造函数深度学习
  • C++使用WideCharToMultiByte函数生成UTF-8编码文件的方法
  • C++聚合关系类的构造函数的调用顺序详解
  • 关于C++类的成员初始化列表的相关问题

相关文章

  • 2017-05-28C 创建链表并将信息存储在二进制文件中读取的实例代码
  • 2017-05-28C语言 动态内存分配的详解及实例
  • 2017-05-28求数组中最长递增子序列的解决方法
  • 2017-05-28基于C语言EOF与getchar()的使用详解
  • 2017-05-28递归法求最大公约数和最小公倍数的实现代码
  • 2017-05-28C++中宏的使用问题详解
  • 2017-05-28C++实现的链表类实例
  • 2017-05-28C++中 STL list详解及简单实例
  • 2017-05-28在C语言中比较两个字符串是否相等的方法
  • 2017-05-28Protocol Buffer技术深入理解(C++实例)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解C语言求两个数的最大公约数及最小公倍数的方法
    • 二叉搜索树的插入与删除(详细解析)
    • 实例讲解C++编程中的虚函数与虚基类
    • C++ 遍历目录下文件简单实现实例
    • 北邮计算机考研复试题的C语言解答精选
    • C语言读取文件流的相关函数用法简介
    • VC++进度条process Bar的用法实例
    • 浅谈C++ 类的实例中 内存分配详解
    • 二维指针动态分配内存连续问题深入分析
    • 详解散列表算法与其相关的C语言实现

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有