【C/C++】【类和对象】构造函数
2021-04-15 22:28
标签:类成员 初始 必须 lan ISE 多个 出现 构造 变量 在类中,有一种特殊的成员函数,它的名字和类名相同,我们在创建类的对象的时候,这个特殊的成员函数就会被系统自动调用,这个成员函数,就叫“构造函数”。因为构造函数会被系统自动调用,所以我们可以简单的理解成 构造函数的目的就是初始化类对象的数据成员; 构造函数 一个类中可以有多个构造函数,更多函数,可以为类对象创建提供多个初始化方法,但是多个构造函数之间总要有点不同的地方,比如,参数数量或参数类型; 2). 在具有多个参数的构造函数中指定默认值时,默认参数都必须出现在不默认参数的右边,一旦某个参数开始指定默认值,他右边的所有参数必须指定默认值; 定义一个对象的时候,当初始化值和对象类型不匹配时候,会存在临时对象和隐式类型转换的问题,编译器内部会进行隐式类型转换;这种写法比较模糊,不能明确编译器到底调用哪个构造函数; 因此可以通过声明构造函数的时候,加上explicit关键字,进制隐式类型转化,该函数只能用于初始化和显示类型转换; 建议 【C/C++】【类和对象】构造函数 标签:类成员 初始 必须 lan ISE 多个 出现 构造 变量 原文地址:https://www.cnblogs.com/Trevo/p/13324447.html构造函数
构造函数的定义
多个构造函数
函数默认参数
隐式转换和explicit
//头文件
#ifndef __MYTIME__
#define __MYTIME__
class Time
{
private:
int MilliSecond; //毫秒
private:
void initMilliSecond(int mls);
public:
int Hour; //小时
int Minue; //分钟
int Second; //秒钟
public:
//构造函数
explicit Time(int tmphour, int tmpmin, int tmpsec);
Time(int tmphour, int tmpmin); //有冲突 与上面的函数
explicit Time(int tmphour);
Time();
//...
private:
//...
};
#endif
//源文件
#include "time.h"
void Time::initMilliSecond(int mls)
{
MilliSecond = mls;
}
Time::Time(int tmphour, int tmpmin, int tmpsec)
//Hour(tmphour), Minue(tmpmin), Second(tmpsec), MilliSecond(0) //构造函数初始化列表
:Hour(tmphour), Minue(Hour) //不要用成员函数去进行初始化,构造函数中先有值还是Minue先有值取决于time.h头文件中定义的顺序
{
// Hour = tmphour; // 成员函数中,可以直接使用成员变量名
// // 哪个对象调用的该成员函数,这些成员变量就属于哪个对象,可以理解成类成员函数知道哪个对象调用自己
// Minue = tmpmin;
// Second = tmpsec;
// initMilliSecond(0);
std::cout
参数初始化列表
Time::Time(int tmphour, int tmpmin, int tmpsec)
//Hour(tmphour), Minue(tmpmin), Second(tmpsec), MilliSecond(0) //构造函数初始化列表
:Hour(tmphour), Minue(Hour) //不要用成员函数去进行初始化,构造函数中先有值还是Minue先有值取决于time.h头文件中定义的顺序
{
// Hour = tmphour; // 成员函数中,可以直接使用成员变量名
// // 哪个对象调用的该成员函数,这些成员变量就属于哪个对象,可以理解成类成员函数知道哪个对象调用自己
// Minue = tmpmin;
// Second = tmpsec;
// initMilliSecond(0);
std::cout