文章目录
- 1.P18 类
- 2.P19 类与结构体的区别
- 3.P20 怎样写一个?Log类
1.P18 类
- 类的本质也是语法糖,它只是将变量和函数结合在一起,使代码更简洁,没有其他功能。
- 类别不提供其他额外的功能,不使用类别不能解决问题,使用类别仍然不能解决。因次C语言,一种不面向对象的语言,也可以完成开发功能。
2.P19 类与结构体的区别
C 类与结构体基本没有区别,只有一个关于可见度的小区别。C 结构体存在的原因是与C保持向后兼容。
- 默认类成员private(私有)意味着只有其他方法可以访问类,需要设置在类的外部调用public(公有)。
- 结构体成员的默认值是public(公有),结构体外也可访问。
3.P20 怎样写一个?Log类
以下函数实现一个Log根据严重程度,可以设置日志的输出级别Error/Warn/Info,对于某个具体的Log比较严重的信息可以输出对象。
#include <iostream> class Log {
// 注意这里public可以写几块,让变量和函数分开写得更清楚 public: const int log_level_error = 0; const int log_level_warn = 1; const int log_level_info = 2; private: int log_level_ = log_level_info; // 成员变量有默认值 public: void SetLevel(int level) {
log_level_ = level; } void Error(const char* msg) {
// 注意这里的判断逻辑,log对象级数越大,输出信息越能包含级数越小 if(log_level_ >= log_level_error) {
std::cout << "[ERROR]: " << msg << std::endl; } } void Warn(const char* msg) {
if(log_level_ >= log_level_warn) {
std::cout << "[WARN]: " << msg << std::endl; }
}
void Info(const char* msg)
{
if(log_level_ >= log_level_Info)
{
std::cout << "[INFO]: " << msg << std::endl;
}
}
};
int main()
{
Log log;
//; 注意这里传参的形参类型在类成员变量中定义,直接传log_level_warn识别不了,所以要传成log.log_level_warn
log.SetLevel(log.log_level_warn);
log.Error("hello"); // 可以输出
log.Warn("hello"); // 可以输出
log.Info("hello"); // 不会输出
return 0;
}