C++类成员相关:打印队列模拟Job类构造函数等代码含义咨询
Job类代码逻辑解析
整体作用
这段代码定义了打印队列场景中的Job(打印任务)类,用来封装单个打印任务的所有属性和配套操作。
类成员说明
私有成员
int id:单个打印任务的唯一标识编号std::string user:提交该打印任务的用户名int time:该打印任务需要的执行时长,单位为秒static int count:类级别的静态成员,所有Job类实例共享这一个变量,作用是统计已经创建的任务总数,用来生成自增的唯一任务id,注意该静态成员必须在类外额外做一次初始化(例如类外写int Job::count = 0;),否则会出现链接错误。
公有成员
构造函数
你提到的Job(const std::string &u, int t) : user(u), time(t), id(++count)是Job类的带参构造函数,分为两部分说明:
- 参数部分:
const std::string &u接收传入的用户名,用const引用是为了避免字符串拷贝开销,同时保证不会修改传入的原字符串;int t接收传入的打印时长。 - 冒号后的部分是C++的成员初始化列表,会在进入构造函数的函数体之前完成成员变量的初始化,比在函数体内赋值的效率更高,尤其是对于
std::string这类非基础类型的成员:user(u):用传入的参数u初始化私有成员usertime(t):用传入的参数t初始化私有成员timeid(++count):先将类共享的静态计数变量count加1,再将结果赋值给当前任务的id成员,这样第一个创建的Job实例id为1,第二个为2,以此类推,保证每个任务的id唯一不重复。
构造函数后的空大括号是函数体,因为所有初始化逻辑已经在初始化列表里完成了,所以函数体不需要额外逻辑。
输出运算符重载
friend std::ostream &operator<<(std::ostream &os, const Job &j)是友元性质的输出流运算符重载:
- 声明为友元是为了让重载的运算符函数可以访问
Job类的私有成员 - 实现的效果是可以直接用
std::cout << job实例的方式打印任务的所有信息,不需要每次手动编写打印逻辑,输出格式已经在函数体内定义好。
内容的提问来源于stack exchange,提问作者Sway the Destroyer 'STD'
相关产品推荐
相关产品推荐

