构造函数详解,explicit,初始化列表
一、构造函数
在类中有一种特殊的成员函数,它的名字与类名相同,我们在创建类的时候,这个特殊的成员函数就会被系统调用。这个成员函数,就叫“构造函数”。
因为构造函数会被系统自动调动,构造函数的目的就是初始化类对象的数据成员。
(1)构造函数没有返回值,这是构造函数的特殊之处。
(2)不可以手工调用构造函数,否则编译会出错。
(3)正常情况下,构造函数应该被声明为public,因为创建一个对象时,系统要替我们调用构造函数,这说明构造函数是一个public的成员
类缺省的成员是私有成员,因此对于构造函数我们必须将其声明为public
class Time
{
private:
int Millsecond; // 毫秒
public:
int Hour; // 小时
int Minute; // 分钟
int Second; // 秒钟 void initTime(int tmpHour, int tmpMinute ,int tmpSecond)
{
Hour = tmpHour;
Minute = tmpMinute;
Second = tmpSecond;
} void initMillTime(int mls)
{
Millsecond = mls; // 成员函数可以访问成员变量,不管成员是否私有
} public:
// 构造函数
Time(int tmpHour, int tmpMinute ,int tmpSecond = )
{
Hour = tmpHour;
Minute = tmpMinute;
Second = tmpSecond;
initMillTime();
cout << “调用了构造函数” <<endl;
} Time() // 不加参数的构造函数
{
Hour = ;
Minute = ;
Second = ;
initMillTime();
cout <<”不加参数的构造函数” <<endl;
} // 单参数构造函数
Time(int tmpHour)
{
Hour = tmpHour;
Minute = ;
Second = ;
initMillTime();
cout << “调用了构造函数Time(int tmpHour)” <<endl;
}
} Time MyTime = Time(,,); // 创建类对象
Time MyTime1(,,); // 创建类对象
二、多个构造函数
一个类中可以有多种构造函数,就可以为类对象的创建提供多种初始化方法,但是多个构造函数需要有点不同的地方,比如参数数量或者参数类型。
对象拷贝
Time mytime2; // 可以调用无参数构造函数
// 下面四个对象并没有调用传统意义上的构造函数,他们调用的实际上是拷贝构造函数。
Time myTime22 = mytime2;
Time myTime23(mytime2);
Time myTime24{myTime2};
Time myTime25 = {myTime2};
三、函数默认参数
规定:
(1)默认值只能放在函数声明中,除非改函数没有函数声明。
(2)在具有多个参数的函数中指定默认值,默认参数必须出现在不默认参数的右边,一旦某个参数开始指定默认值,那么它右边的参数必须全部指定默认值。
Time mytime50 = Time(,); // 调用构造函数的时候,若有参数指定默认值,则可以不再参数列表中写。
四、隐式转换与explicit
Time mytime40 = ; // 42 // 调用了单参数的构造函数
Time mytime41 = (,,,,,); // 6 系统将数字转换为临时的Time对象
Time mytime100 = {}; // 正常写法,带一个参数16可以让系统明确的知道调用那个构造函数。
Time mytime101 = ; // 含糊不清的写法,存在临时对象隐式转换的问题
//是否可以强制系统,明确要求构造函数不能做隐式类型转换?
//可以,如果构造函数声明中带有explicit,则这个构造函数只用于初始化和显式类型转换;
// 构造函数前面加explicit
explicit Time(int Hour,int Minute,int Second);
Time myTime = Time(,,);
Time myTime(,,);
Time myTime = Time{,,};
Time myTime{,,};
//Time myTime = {12,13,14); // 做了隐式类型转换,出问题,复制列表初始化
//对于单参数的构造函数,一般都声明为explicit,除非你有特殊的理由。
//不允许直接调用构造函数。
五、构造函数初始化列表
Time::Time(int tmpHour,int tmpMinute,int tmpSecond):Hour(tmpHour),Minute(tmpMinute),Second(tmpSecond)
{ }
构造函数详解,explicit,初始化列表的更多相关文章
- C++构造函数详解及显式调用构造函数
来源:http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html c++类的构造函数详解 ...
- C++中构造函数详解及显式调用构造函数
C++构造函数详解及显式调用构造函数 c++类的构造函数详解 一. 构造函 ...
- [转]c++类的构造函数详解
c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初 ...
- c++构造函数详解
c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初 ...
- c++类的构造函数详解
c++类的构造函数详解 一. 构造函数是干什么的 class Counter{ public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类 ...
- C++构造函数详解(复制构造函数)
构造函数是干什么的 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员. 构造函数的种类 class Compl ...
- c++构造函数详解(转)
c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初 ...
- 转 C++拷贝构造函数详解
C++拷贝构造函数详解 一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一 ...
- 08--C++拷贝构造函数详解
C++拷贝构造函数详解 一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plain copy int a = 100; int b ...
- 07--c++类的构造函数详解
c++类的构造函数详解 c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特 ...
随机推荐
- Maven的pom.xml介绍
6.1 简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:可以配置Ma ...
- UX设计案例研究:建立更好的用户体验(重新设计Air Peace Airline网站)
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 坐飞机旅行总是能给人带来很棒的体验,但我认为应该考虑预订航班时给用户带来的压力.在如今的数字世界,我 ...
- java关于split分割字符串,空的字符串不能得到的问题
java关于split分割字符串,空的字符串不能得到的问题 class T { public static void main(String args[]) { String num[] = ne ...
- 数据结构(c语言版)文摘
第一章 绪论 数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科. 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理 ...
- 持续集成与devops
持续集成 持续集成 持续集成(Continuous integration,简称CI),简单的说持续集成就是频紧地(一天多次)将代码集成到主干,它的好处主要有两个: 1.快速发现错误.每完成一次更新, ...
- windows server2012怎样关机怎样重启-详细教程
| 浏览:1991 | 更新:2014-12-15 17:33 1 2 3 4 5 6 分步阅读 百度经验:jingyan.baidu.com windows server2012和以往有些不同,关机 ...
- After Upgrade To Release 12.1.3 Users Receive "Function Not Available To This Responsibility" Error While Selecting Sub Menus Under Diagnostics (Doc ID 1200743.1)
APPLIES TO: Oracle Application Object Library - Version 12.1.3 to 12.1.3 [Release 12.1] Information ...
- TortoiseSVN本地版本控制管理
TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端.下载地址:https://tortoisesvn.net/downloads.html. 安装好TortoiseSV ...
- BFC开启条件
当元素CSS属性设置了下列之一时,即可创建一个BFC: float:left|right position:absolute|fixed display: table-cell|table-capti ...
- 神器与经典--DMVsinSQLServer
前言: 在不经意间发现这个SQL,正能量瞬间饱满,赶紧向周边的人分享,私藏是罪过啊! 请复制粘贴然后F5,经典无须多说! /************************************** ...