C++类之构造函数

Time.h头文件

#ifndef _MYTIME_	
#define _MYTIME_

class Time
{
public:
	int Hour;
	int Minute;
	int Second;

	//成员函数
	//void initTime(int tmphour, int tmpmin, int tmpsec);

public:
	//构造函数
	explicit Time(int tmphour, int tmpmin, int tmpsec); //explicit 显示的, 而非隐式的 不能Time() = xx;
	Time(int tmphour, int tmpmin);
	Time(int tmphour);
	explicit Time();
	//拷贝构造函数
	Time(const Time &tmtptime, int a = 56); //最好在开头加const 第一个参数是所属类 地址的引用引用
	//拷贝构造函数的作用:会在一定的时机,被系统自动调用
	//(1) 建议拷贝构造函数第一个参数总是带const
	//(2) 拷贝构造函数一般不带explicit

	//重载的赋值运算符
	Time& operator = (const Time&);//重载的赋值运算符

	~Time();//析构函数


	

	//成员函数加const
public:
	void addhour(int tmphour) const;
	Time& add_hour(int tmphour);

private:
	int Millsecond; //毫秒

	void initMillTime(int mls);
};

//public:
	

#endif


Time.cpp

//#include "stdafx.h"

#include "Time.h"
#include <iostream>

//成员 iniTime()的实现
//两个冒号叫作用域运算符,表示iniTime属于Time 的Class

//void Time:: initTime(int tmphour, int tmpmin, int tmpsec)
//{
//	Hour = tmphour;
//	Minute = tmpmin;
//	Second = tmpsec;
//}

void Time::initMillTime(int mls)
{
	Millsecond = mls; //成员函数可以访问成员变量,无论是否私有
}

/// <summary>
/// 构造函数初始化 带两个参数的构造函数
/// </summary>
/// <param name="tmphour"></param>
/// <param name="tmpmin"></param>
/// <param name="tmpsec"></param>
Time::Time(int tmphour, int tmpmin, int tmpsec) 
	:Hour(tmphour), Minute(tmpmin), Second(tmpsec), Millsecond(0) //Millsecond(0) //构造函数初始化列表 效率高
{
	//Hour = tmphour;
	//Minute = tmpmin;
	//Second = tmpsec;
	//initMillTime(0);

	std::cout << "调用了构造函数Time::Time(int tmphour, int tmpmin, int tmpsec)" << std::endl;
}

Time::Time()
{
	Hour = 12;
	Minute = 50;
	Second = 52;
	initMillTime(50);

	std::cout << "调用了构造函数Time::Time()" << std::endl;
}

//void Time::addhour(int tmphour) const
//{
//	//Minute = tmphour; //报错 必须是常量
//}

Time& Time:: add_hour(int tmphour)
{
	Hour += tmphour;
	return *this; //
}

Time::Time(const Time &tmptime, int a)
{
	std::cout << "调用了Time::Time(const Time& tmptime, int a)拷贝构造函数" << std::endl;
}

//赋值运算符的重载
Time& Time::operator = (const Time&)//重载的赋值运算符
{
	std::cout<<"调用了Time& Time::operator = (const Time&) 赋值运算符重载" << std::endl;
	return *this;
}
Time::~Time()
{
	std::cout << "调用了析构函数,并不在析构函数里销毁" << std::endl;

}

主程序

#include "head2.h"
#include "student.h"
#include "Time.h"
#include <cstdio>//stdio.h
#include <iostream>

using namespace std;

//class student
//{
//public:
//	int number;
//	char name[100];
//
//};





int main()
{
	//如果访问类成员,就使用对象名.成员名 访问
	//如果指向这个对象的指针,就用 指针名->成员名 来访问成员。
	//struct A{...}等价于class A{public: ......}

	//student someone; //定义对象
	//someone.number = 1000; //访问成员
	//student* psomeone = &someone;
	//psomeone->number = 1005;

	//cout << someone.number << endl;

	/// <summary>
	/// 三,成员函数
	/// </summary>
	/// <returns></returns>
	
	//Time myTime;
	//myTime.initTime(11, 14, 5);
	//cout << myTime.Hour << endl; //11
	//cout << myTime.Minute << endl; //14
	//cout << myTime.Second << endl; //5
	//return 0;

	/// <summary>
	/// 四,对象的拷贝
	/// </summary>
	/// <returns></returns>
	//Time myTime;
	//myTime.Hour = 12;
	//myTime.Minute = 12;
	//myTime.Second = 12;

	//Time myTime2 = myTime;
	//Time myTime3(myTime);
	//Time myTime4{ myTime };
	//Time myTime5 = { myTime };

	//多个构造函数
	//Time myTime10 = Time();

	//Time myTime12;
	//Time myTime13 = Time{};
	//Time myTime114{};
	//Time myTime15 = {};

	//Time mytime;
	//mytime.add_hour(3); 
	//-		&mytime	0x000000e43b1ef598 {Hour=12 Minute=50 Second=52 ...}	Time *
	// -		this	0x000000e43b1ef598 {Hour=15 Minute=50 Second=52 ...}	Time *
	// this 指向mytime


	//六, 拷贝构造函数
	//Time myTime;
	//Time myTime2 = myTime;
	//Time myTime3(myTime);
	//Time myTime4{ myTime };
	//Time myTime5 = { myTime };
	//Time myTime6;
	//myTime6 = myTime; // 调用了Time& Time::operator = (const Time&) 赋值运算符重载

		//调用了构造函数Time::Time()
		//调用了Time::Time(const Time & tmptime, int a)拷贝构造函数
		//调用了Time::Time(const Time & tmptime, int a)拷贝构造函数
		//调用了Time::Time(const Time & tmptime, int a)拷贝构造函数
		//调用了Time::Time(const Time & tmptime, int a)拷贝构造函数
		//调用了构造函数Time::Time()
		//调用了Time& Time::operator = (const Time&) 赋值运算符重载
		//调用了析构函数, 并不在析构函数里销毁
		//调用了析构函数, 并不在析构函数里销毁
		//调用了析构函数, 并不在析构函数里销毁
		//调用了析构函数, 并不在析构函数里销毁
		//调用了析构函数, 并不在析构函数里销毁
		//调用了析构函数, 并不在析构函数里销毁

	//七, new 对象 和delete对象

	Time* pmytime5 = new Time; //调用不带参数的构造函数
	Time* pmytime6 = new Time();
	 
	delete pmytime5; //释放内存 并调用析构函数
	delete pmytime6;

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值