MOOC清华《面向对象程序设计》第4章编程题:按照调试级别输出调试信息

本文主要是介绍MOOC清华《面向对象程序设计》第4章编程题:按照调试级别输出调试信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

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



我的答案:

//main.cpp
#include <iostream>
#include "Log.h"
using namespace std;int main() {Log obj;obj.set_level("error");obj << level("warning");obj << level("fatal");return 0;
}

//Log.h
#ifndef Log_h
#define Log_hclass Log{char* std_str;
public:int set_level(char* str1);Log& operator<< (int level_num);
};int level(char* str2);#endif

Log.cpp
#include <iostream>
#include <cstring>
#include <string>
#include "Log.h"
using namespace std;int Log::set_level(char* str1){std_str = str1;if(strcmp(std_str, "warning") == 0) return 1;if(strcmp(std_str, "error") == 0) return 2;if(strcmp(std_str, "fatal") == 0) return 3;
}int level(char* str2){if(strcmp(str2, "warning") == 0) return 1;if(strcmp(str2, "error") == 0) return 2;if(strcmp(str2, "fatal") == 0) return 3;
}Log& Log::operator<< (int level_num){Log obj;if(level_num < obj.set_level(std_str)) return *this;if(level_num >= obj.set_level(std_str)){if(level_num == 1) cout << "WARNING MESSAGE" << endl;if(level_num == 2) cout << "DEBUG MESSAGE" << endl;if(level_num == 3) cout << "BROKEN" << endl;return *this;} 	
}

编译器信息:


输出结果:


调试了两天、最终解出这一题的经验总结:

1,不要随便用const,不是所有函数都适合用const修饰的,一修饰就会有某些限定,容易出bug;

2,成员函数可以重载,普通函数也可以重载,但是重载的条件是形参列表有不同,而不是返回值类型有不同;

3,是基本类型的变量,还是指向基本类型变量的指针变量,要区分清楚;

4,哪些成员需要私有,哪些成员需要公有,需要斟酌;

5,哪些变量需要全局化,哪些变量需要局部化,需要斟酌;

6,程序在修改调试阶段,尽可能保留每次修改的痕迹,否则把正确的代码改掉了,再想找回来很难;

7,这道题的描述中,插入流运算符<<应该连续输出 obj << level("warning") << "WARNING MESSAGE" << endl;并把level("warning")作为是否输出后面"WARNING MESSAGE"的控制符,但是我到现在还没有想到怎么做,头文件iostream里面的控制符列表中似乎也没有含有这种功能的控制符。期待能见到高人的解答。

=====================分割线=====================

今天又想到了一招,可以向题目要求再逼近一步!方法就是对输出流运算符重载,可以处理题目要求中带双引号部分的内容,而不会引起报错。

//main.cpp
#include <iostream>
#include "Log.h"
using namespace std;int main() {Log obj;obj.set_level("error");obj << level("warning") << "WARNING MESSAGE";obj << level("fatal") << "BROKEN";return 0;
}

//Log.h
#ifndef Log_h
#define Log_hclass Log{char* std_str;
public:int set_level(char* str1);Log& operator<< (int level_num);Log& operator<< (char* str3);
};int level(char* str2);#endif

//Log.cpp
#include <iostream>
#include <cstring>
#include <string>
#include "Log.h"
using namespace std;int Log::set_level(char* str1){std_str = str1;if(strcmp(std_str, "warning") == 0) return 1;if(strcmp(std_str, "error") == 0) return 2;if(strcmp(std_str, "fatal") == 0) return 3;
}int level(char* str2){if(strcmp(str2, "warning") == 0) return 1;if(strcmp(str2, "error") == 0) return 2;if(strcmp(str2, "fatal") == 0) return 3;
}Log& Log::operator<< (int level_num){Log obj;if(level_num < obj.set_level(std_str)) return *this;if(level_num >= obj.set_level(std_str)){if(level_num == 1) cout << "WARNING MESSAGE" << endl;if(level_num == 2) cout << "DEBUG MESSAGE" << endl;if(level_num == 3) cout << "BROKEN" << endl;return *this;} 	
}Log& Log::operator<< (char* str3){return *this;
}



至于输出流运算符后面如果跟endl该怎么处理,目前真不知道如何解决。endl并不等于'\n',也不知道具体的数据类型,束手无策,目前只能做到这一步了。

这篇关于MOOC清华《面向对象程序设计》第4章编程题:按照调试级别输出调试信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727870

相关文章

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

MySQL中的事务隔离级别详解

《MySQL中的事务隔离级别详解》在MySQL中,事务(Transaction)是一个执行单元,它要么完全执行,要么完全回滚,以保证数据的完整性和一致性,下面给大家介绍MySQL中的事务隔离级别详解,... 目录一、事务并发问题二、mysql 事务隔离级别1. READ UNCOMMITTED(读未提交)2

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

MySQL中隔离级别的使用详解

《MySQL中隔离级别的使用详解》:本文主要介绍MySQL中隔离级别的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言undo log的作用MVCC的实现有以下几个重要因素如何根据这些因素判断数据值?可重复读和已提交读区别?串行化隔离级别的实现幻读和可

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模