c++-求教简单C++ OOP题目 关于Log库的简易编写

问题描述

求教简单C++ OOP题目 关于Log库的简易编写

Log是用来对复杂程序进行调试的常用手段,用来实现log的库也是我们非常常用的程序
库之一。请你设计一个简化的log程序库,做到如下几点:
a) 能够支持三种不同的log目的地(控制台、文件、数据库)及这三种目的地的自由
组合,目的地可以动态变化,未来可能需要加入更多种类的目的地(比如限制长度
的文件);
b) 能够支持三种不同的log格式(简单不带任何附加信息,附带短格式表示的当前时
间,附带长格式表示的当前时间),格式可以动态变化(即可以在log 对象产生之
后动态修改其使用的log格式),以后可能需要加入更多种类的格式;
c) 支持对string类型进行log操作。
请针对这几点需求对这个程序库进行设计,不要求实际实现功能,只要在相应功能处
用输出语句输出标记即可。

解决方案

 abstract class IWriterSerivce
{
    public: void Write(string context) = 0;
}
class FileWriter : public IWriterSerivce
{
    public: void Write(string context) { / * 将context写入文件 */ }
};
class DBWriter : public IWriterSerivce
{
    public: void Write(string context) { / * 将context写入数据库 */ }
};
class ConsoleWriter : public IWriterSerivce
{
    public: void Write(string context) { / * 将context输出控制台 */ }
};
class LogBase
{
    protected: IWriterSerivce ** services;
        protected: int servicecount = 0;
        protected: virtual string formatLog(string s) { return s; }
        public: void Write(string s)
        {
            string fs = formatLog(s);
            for (int i = 0; i < servicecount; i++)
                {
                     services[i]->Write(fs);
                }
        }
};
class SimpleLog : public LogBase
{
    protected virtual string formatLog(string s) { return 格式化(s); }
};
class ShortDateTimeLog : public LogBase
{
    protected virtual string formatLog(string s) { return 格式化(s); }
};
class LongDateTimeLog : public LogBase
{
    protected virtual string formatLog(string s) { return 格式化(s); }
};
使用:
比如说我要用输出控制台、文件,短日期:
class MyLog : public ShortDateTimeLog
{
    public MyLog()
        {
    services = new IWriteService[2];
        service[0] = new FileWriter();
        service[1] = new ConsoleWriter();
        servicecount = 2;
        }
};

MyLog log;
log.Write(yourstring);
时间: 2024-10-30 11:19:39

c++-求教简单C++ OOP题目 关于Log库的简易编写的相关文章

oop-一道简单的OOP题目……不会做……求源程序 半小时内速求……

问题描述 一道简单的OOP题目--不会做--求源程序 半小时内速求-- 有个虚拟足球俱乐部的球队经济人又新招了5名队员,他写了下面的代码,为新队员建了 一个数组,并输出数组的所有元素.其中字符串是队员的名字,而数字则是队员的年龄. 不过有个队员的名字他竟不记得了(他的名字只好用"???"表示,年龄为0). (1)请你为``队员"这种对象定义一个类(队员信息的输出格式自定),使程序能编译通 过(不应通过修改main()函数来完成此要求).要求每个队员的姓名和年龄都是常量. in

gui- 新手求教一道简单的字符串题目。。

问题描述 新手求教一道简单的字符串题目.. 假设一道包含n个单词的题,经蓝神读过之后,虽然单词的长度和 数量都没有变化,但内容可能已经面目全非了.现在,蓝神的队友需要你帮忙计算一下原题与蓝神读过之 后的题的相似度.单个单词相似度的计算方法是蓝神读之前和读过之后没有变化的字母个数除以单词长度 乘上百分之百,总的相似度等于所有单词相似度的平均值. Input 第一行一个整数T(T <= 200),代表蓝神读了T次题.每次第一行一个整数n(0 < n <= 100),代表这次的题有n个单词,接

c++问题-一道简单的c++题目,求解此段代码错哪了

问题描述 一道简单的c++题目,求解此段代码错哪了 题目是第四题,求解此段代码错哪了 解决方案 你的sum每次枚举完n后,要清0 解决方案二: i在每次循环结束都要置0或1 否则从第二轮循环开始i都是从上次结束的地方开始的 所以没有输出

求教一道c语言题目……

问题描述 求教一道c语言题目-- 设有:int a = 1,b = 2,c==3,d = 4,m = 2,n = 2:执行(m = a > b) && (n = c > d)后n的是多少? 解决方案 2,因为&&判断第一个表达式为假时不会执行第二个判断也就是并没有执行任何对n的赋值,所以仍为2 解决方案二: 2 解决方案三: http://codepad.org/bTQw4SAO 解决方案四: 一道C语言题目一道C语言的题目一道有趣的c语言题目 解决方案五: 2

android开发-在Android有没有结构简单、使用方便的图表库?(有Demo最好)

问题描述 在Android有没有结构简单.使用方便的图表库?(有Demo最好) 在Android有没有结构简单.使用方便的图表库?(有Demo最好)

一个很简单的C题目,我理解不了,还请大牛分析下

问题描述 int a[3][5],*p=a,(*)q[5]=a;设a的地址为2000,则下述语句的输出的结果?? printf("%u%un",p+6,*(q+1)+4); 理解不了的地方:(*)q[5]=a,这句话是什么意思呢?实在是费解,还请大牛给分析下 问题补充:changzhiwin 写道 解决方案 引用最后,你说(*)q[5]=a 不理解,我认为是不解 (*q)[5] = a 这句,其实这是定义了一个数组指针,该指针这项的是一个数组.例如 ++q,是将q移动一个数组的距离,在

一道简单的Map题目求解答

问题描述 packageMap;importjava.util.HashMap;importjava.util.Map;classDog{Stringname;Dog(Stringname){this.name=name;}@Overridepublicbooleanequals(Objectarg0){//TODOAuto-generatedmethodstubif((arg0instanceofDog)&&(((Dog)arg0).name==name)){System.out.pri

【C/C++学院】0801-重定向以及文件扫描/二进制加密解密/简单加密/按照密码加密/动态库与静态库

重定向以及文件扫描 #define _CRT_SECURE_NO_WARNINGS//关闭安全检查 #include<stdio.h> #include<stdlib.h> void main1() { char str[100] = { 0 }; scanf("%s", str); printf("str=%s\n", str); system(str); } void main2() { char str[100] = { 0 }; fs

Android中简单的电话管理与短信管理App编写实例_Android

android电话管理器(TelephonyManger)实例:TelephonyManger是管理电话状态.网络信息的服务类. 添加权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 逻辑功能: