一:类相关非成员函数
普通函数,不是成员函数
void Writetime(Time &mytime){
std::cout << mytime.hour << std::endl
}
函数的声明放在类的后面
二:类内初始化
在c++11里,我们可以为类内成员变量提供一个初始值,那么我们在创建对象的时候,这个初始化值就用来初始化该成员变量。
class Time{
public:
int hour;
int minute;
int second = 0;
int second = {0};
//类内初始化值
};
【c++学习|14.4 类内初始化、默认构造函数、“=default”和“=delete”】三:const成员变量的初始化在构造函数的列表里面初始化,不可以通过赋值来初始化
class Time{
public:
const int Hour;
const int Minute;
int second;
};
Time::Time(int hour, int minute, int second): Hour(hour), Minute(minute), Second(second)
{
Hour = hour;
//const成员变量,不可以这样初始化
Minute = minute;
//const成员变量,不可以这样初始化
}
四:默认构造函数:没有参数的构造函数,我们就称为默认构造函数
没有构造函数,这些类对象如何初始化呢?
这叫"默认初始化"。也就是说,这个类通过一个特殊的构造函数来执行默认的初始化过程。那么这个特殊的构造函数就叫做"默认的构造函数",也就是无参数的构造函数。
在类定义中,如果没有构造函数的情况下,编译器就会为我们隐式的自动定义一个"默认构造函数"(无参)称为"合成的默认构造函数"。
这个"合成的默认构造函数"做了些什么?
其实他没有做什么。一旦我们自己写了一个构造函数,不管这个构造函数带几个参数,编译器就都不会为我们生成“合成的默认构造函数”了。
class Time2{
public:
explicit Time2(){//不带参数的构造函数
Hour = 12;
} public:
int Hour;
int Minute
int Second {0};
}Time2 mytime2;
//生成对象时会调用类的无参构造函数。class Time3{
public:
int Hour;
int Minute
int Second {0};
}Time3 mytime3;
//会生成合成的默认构造函数class Time3{
public:
int Hour;
int Minute
int Second {0};
Time3(int tmphour){
Hour = tmphour;
}
}Time3 mytime3;
//这样写将是错误的,因为有参数的构造函数,将不会生成"合成的默认构造函数";class OneClass
{
public:
OneClass(int a)
{
}
};
class Time4{
public:
int Hour;
int Minute
int Second {0};
OneClass oc;
Time(): oc(100)
{
}
}
<1>类类型成员变量oc的初始化,必须通过“构造函数初始化列表”来进行初始化的操作
<2>const成员变量的初始化,必须通过“构造函数初始化列表”来进行初始化的操作
五:=default,=delete,c++ 11引入的
int func() = default; 非特殊函数,不可以使用 = default;
class Time4{
public:
int Hour;
int Minute
int Second {0};
Time4(int tmphour){}//带参数的构造函数,也不可以使用 =default。
Time4() = default;
//编译器能够为这种 =default 的函数自动生成函数体。
};
Time4 mytime4;
//能够实现。//=default;
编译器能够为我们自动生成函数体。class Time5{
public:
int Hour;
int Minute
int Second {0};
Time5(int tmphour){}//带参数的构造函数,也不可以使用 =default。
Time5() = delete;
//让程序员显式的禁用某个函数。
}Time5 mytime5;
//实效,没有不带参数的构造函数,所以定义对象失败。
注意:
“Time2()=delete; ”代码行导致Time2 myTime2报错,在编译器看来,这两行代码就是不能共存。
推荐阅读
- c++学习|17.6 unique_lock详解
- C++|C++ - 智能指针
- C++|C++ - Lambda表达式
- C++ - 子类与父类的同名成员变量
- C++|【C++】多态
- QT|QT---创建对话框3(形状可变对话框的实现)
- QT|Qt状态机的使用
- C++|Qt-Q_OBJECT宏及控件提升导致的类重定义问题
- C++学习|C++从文件中提取英文单词