类与结构体
出于统一编程风格考虑,当我们希望定义的类的所有成员是public时,使用struct,如果希望成员是private的,使用class。
:::tips 使用class和struct定义类的唯一的区别就是默认的访问权限。 :::
自定义一个类型成员
静态成员
友元(friend)
内联成员函数
构造函数(constructor)
它的任务:初始化类对象的数据成员。
注意事项:
- 构造函数没有返回类型,且函数名必须与类名相同
- 支持重载
默认构造函数(default constructor)
不含任何形参的构造函数。
:::tips 只有当类没有声明任何构造函数时,编译器菜会自动地生成默认构造函数。 :::
#include <iostream>
using namespace std;
class Clock {
public:
void set_time(const unsigned default_h,
const unsigned default_m,
const unsigned default_s)
{
h = default_h;
m = default_m;
s = default_s;
};
void show_time()
{
cout << "H:" << h << endl;
cout << "M:" << m << endl;
cout << "S:" << s << endl;
};
//Clock() = default;
//重写默认构造函数
Clock() :h(0), m(0), s(0)
{
};
//构造函数
Clock(const unsigned default_h,
const unsigned default_m,
const unsigned default_s)
{
h = default_h;
m = default_m;
s = default_s;
};
private:
unsigned h, m, s;
};
#include "Clock.cpp"
int main()
{
//方法一:调用了默认构造函数
Clock c;
c.show_time();
//方法二:调用类的成员函数
c.set_time(9, 10, 29);
c.show_time();
//方法三:构造函数
Clock c2(12, 12, 12);
c2.show_time();
}
合成默认构造函数
对于没有显式地定义任何构造函数的类,编译器为其创建(合成)默认构造函数。
该构造函数检查类的数据成员,如果提供了类的初始值,就用它执行初始化操作;否则就对数据成员执行默认初始化。
委托构造函数(delegating constructor)
c+11新标准,它把它自己的一些(或者全部)职责委托给了其他构造函数)
复制构造函数
其他函数事项
在类的外部定义构造函数
this
常量成员函数(const member function)
this指针是指向常量的指针,通过区分函数是否是const可以进行重载。
const的作用是修改隐式this指针的类型。
应用场景
一个类中的get函数(类似java中的getter和setter函数)
// 读取类的私有成员变量
Cpu_rank getRank() const
{
return rank;
}
unsigned getFrequency() const
{
return frequency;
}