题目要求:
在程序中输出一些信息,是一种很有效的调试方法。请设计实现一个名为Log的类,能方便输出调试信息,要求满足如下附件所写的要求:

关键点:
利用重载流运算符、重写属于自定义类(Log)的endl流运算符
解题思路:
依题目要求已知类Log有成员函数set_level、全局函数level和运算符重载函数。等级比较可以转化成int型数据,故这里的level建议使用int类型。
先判断有无调用全局函数set_level(“message”)
-
没有调用,则调用重载流运算符函数operator<<() 输出后面的信息,此功能对应第一条支持使用流运算符输出信息.
-
调用过,则首先储存自定义的信息(即记录operator<<后的字符串,如题目最后一行的 “BROKEN” ),暂时不输出,并在最后重载流运算符输出endl时满足对应情况输出自定义的信息。此功能对应调试信息的分级控制,注意到有全局等级和每一次调试的当前等级,故又分两种情况:
①全局等级>当前信息等级,则直跳过不输出任何信息(返回自身)
②全局等级<=当前信息等级,则输出在定义该信息时传入的调试string字符串
Tip:全局等级为调用成员函数set_level()设置的等级.
代码(运行环境VS2019):
#include <iostream>
#include <string>
using namespace std;
int level(char* gloStr); //全局成员函数(输出时保证为三种定义的异常字符串中的一种)
class Log {
private:
char* str = 0; //用于保存本类的错误信息
string message; //若允许,则可以修改当前的错误信息,用于在重载endl时输出
bool hasSet = false; //已经调用set_level()全局函数,调用则修改为true,方便后续输出信息
int globLevel; //全局等级,只能用set_level修改,与currentLelel对比用
int currentLevel; //当前等级,用于level,只能用level修改
public:
//Log(); //构造函数
int set_level(const char* str); //用于设置全局信息
Log& operator<< (int levelNum); //根据当前的错误等级输出,若调用则默认已设置全局函数
Log& operator<< (const char* midStr); //传入临时的字符串,若是对应的错误信息则输出
//该重载函数分已调用set_level和未调用set_level两种情况
//分别对应判断(不输出)和输出信息

本文介绍了一个C++自定义Log类的设计与实现过程,该类能够通过重载流运算符和endl来控制不同级别的调试信息输出。适用于C++初学者理解和实践面向对象编程中的重载技术和调试技巧。
最低0.47元/天 解锁文章
1634

被折叠的 条评论
为什么被折叠?



