博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C/CPP-创建类对象

Posted on 2023-03-13 09:35  乔55  阅读(29)  评论(0编辑  收藏  举报

创建类对象的方式

Time mytime;			        // 调用无参构造函数
Time mytime1(1, 12, 20);        // 调用有参构造函数
Time mytime2{ 1,12,20 };	    // 调用有参构造函数
Time mytime3 = { 1,12,20 };	    // 调用有参构造函数,隐
Time mytime4 = Time(1, 12, 20);	// 调用有参构造函数,无隐式类型转换
Time mytime5 = Time{ 1,12,20 };	// 调用有参构造函数

调用构造函数的方式

// 括号法:
class Person;
Person p;		// 无参构造
Person p(10);	// 有参构造
Person px(p);	// 拷贝构造

// 显式法
Person p1 = Person(10);	// 有参构造
Person p1 = Person(p2);	// 拷贝构造
Person(10);	// 匿名对象,当前行结束会,系统会立即回收该匿名对象

// 隐式转换法
Person p = 10;	// 相当于写了:Person p4 = Person(10);
Person p1 = p;	// 拷贝构造

创建类时发生隐式类型转换的场合

1. // 创建类对象时,可能伴随着创建临时对象,即发生隐式类型转换
2. // 在声明构造函数时加上explicit,即可制止隐式类型转换的发生
3. // 一般单参数的构函,都建议加上explicit

class Time;
Time mytime6 = 10;	         // 调用单参数构函,发生隐式类型转换
Time mytime7 = (1, 2, 3, 4); // 没有4参数构函,调用了1参数构函,隐
myFunc(10);		             // 调用单参数构函,隐
myFunc((10, 20, 30));	     // 调用单参数构函,隐
Time mytime8 = (1, 2, 3);    // 调用单参数构函,隐
Time mytime9 = Time(1, 2, 3);// 调用3参数构函

类定义举例:创建一个时钟计时器

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <Windows.h>


class Time
{
private:
	int Hour;
	int Minute;
	int Second;
public:
	Time()
	{
		Hour = 0;
		Minute = 0;
		Second = 0;
	}
	Time(int h, int m, int s)
	{
		Hour = h;
		Minute = m;
		Second = s;
	}
	void myclock();
};
void Time::myclock()    // 计时函数
{
	// 先打印当前时刻
	printf("%02d:%02d:%02d\n", Hour, Minute, Second);
	while (1)
	{
		Sleep(1000);    // 间隔1秒
		Second = (Second + 1) % 60;    // 秒数增加
		if (Second == 0)
		{
			Minute = (Minute + 1) % 60;              // 满60秒分针进1
			if (Minute == 0)
			{
				Hour = (Hour + 1) % 24;   // 满60分时针进1
			}
		}
		// 打印下一秒时刻
		printf("%02d:%02d:%02d\n", Hour, Minute, Second);
	}
}
int main()
{
	Time mytime(12, 59, 0);
	mytime.myclock();
	return 0;
}