创建类对象的方式
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;
}