log4cpp的使用
log4cpp的使用逻辑构造
目的地Appender:用于表示日志系统最后输出到哪布局Layout:表示你输出的格式,类似与printf优先级Priority:常见的优先级有emerg,alert,crit,error,warn,notice,info,debug,优先级从高到低排列,优先级主要针对不同用户设定,如果一个用户设定的优先级是warn,那么notice,info,debug的信息就会忽略掉不输出日志Category:是整个日志系统的主干,目的地的设定添加和模板设置,日志记录都由Category完成
一个目的地只能有一个布局,一个布局对应一个目的地
基本模板#include <iostream>#include <log4cpp/OstreamAppender.hh> #include <log4cpp/Appender.hh>#include <log4cpp/BasicLayout.hh>#include <log4cpp/Category.hh>#include <log4cpp/Priority.hh ...
log4cpp的安装(vs_visual studio版)
log4cpp安装下载源log4cpp
visual studio安装方法
将下载好的压缩包解压缩后得到下列目录(解压缩的文件夹最好放C盘,不然在编译阶段往往会出现链接不上的问题)找到mscv10文件夹内的mscv10.sln项目文件,右键log4cppLIB源文件,生成(编译器一定要选WIN32)
回到mscv10文件夹中,此时有了release或debug版本,将release文件夹中的log4cppLIB.lib复制,将debug文件夹中的log4cppD.lib复制,并把log4cpp目录下的inclue文件夹复制(建议两个版本都安装一遍)
在一个方便的路径下粘贴三个文件,两个lib文件放在lib文件夹中,include文件夹放在当前目录下
此时路径已经设置好了,在vs新建一个项目,专门用于写log4cpp相关的代码,配置环境(编译器一定要选WIN32,和前面生成的文件匹配)
在项目属性下找到VC++目录选项,修改包含目录和库目录(注意要先点继承父级目录后再添加路径),包含目录添加include路径,库目录添加lib路径.
在链接器选项下的输入选项中,修改附加依赖项(也要注意保 ...
C++中的三种IO形式
流流的概念流就是流动,从某一处流向另一处的过程在C++中,流的基本单位是字节,因此也称为字节流
流的四种状态
goodbit 有效状态badbit 系统级别的错误,不可恢复failbit 可恢复的错误eofbit 到达了流的末尾
标准IO
标准IO四种状态和重置忽略函数的使用io标准库,与IO常用函数
#include <iostream>using std::cin;using std::cout;using std::endl;using std::istream;
标准IO使用
#include <iostream>using std::istream;using std::cin;using std::cout;using std::endl;using std::string;void printStreamStatus(istream& is)//istream为自定义类型,表示输入函数{ //输入函数cin本质上是一个对象,内部也有相应的成员函数可以调用 //good bad fail eof 与其上意义相同,为1为真 ...
对象应用:C++字符串和vector,对象的new与delete重构
C++字符串和vectorC++的字符串是一个对象,存在于std标准库中,是std标准库提供的自定义类类型所占存储空间较大,40字节,数据成员一般都包含vector是一种动态数组,也存在与std标准库中,一般都有size和capacity两个数据成员
字符串创建方式默认创建
string s1;
C语言字符串创建
string s2("Hello");
指定长度的单个字符创建
string s3(10,'a');
字符串拼接只能用+拼接,+两边必须有一个是string类对象
string s4 = s3 + s2;s4 = s3 + "Hello";s4 = "Hello" + s3;
字符串追加追加特定长度字符
s3.append(3,'a');
追加字符串
s3.append("Hello");
追加string类对象
s3.append(s2);
追加string类对象指定起始位置指定长度
s3.apend(s2,0,5);
字符串截断// ...
对象应用和单例模式
this指针和重构
this指针this指针用来指向当前对象
class Point{public: Point(int ix = 0, int iy = 0) :_ix(ix) , _iy(iy) { cout << "Have done Create" << ' '<<_ix<<' '<<_iy<<endl; } void print() { cout<<this->_ix<<' '<<this->_iy<<endl; }private: int _ix; int _iy;};
每一个非静态修饰的成员函数都有隐含的this指针(为什么静态没有,后文会说明)
this指针会作为函数成员的一个隐藏的第一个参数,在编译时会自动填充,不需要我们自己填补(会报错)
Point p1(1, 1);p1.print( ...
对象的创建,初始化,销毁与拷贝
一些小细节
在c++中,struct的功能已经进行扩展,基本和class的功能一致唯一的区别就在于struct默认为public,class默认为private
对象的创建
默认创建如果不需要任何附加条件,仅仅是创建一个对象的话,直接写是OK的对象创建时,如果是带括号的无参创建,实际意义是函数声明(很奇怪,在函数内部还能声明函数)
#include <iostream>using std::cout;using std::endl;using std::string;class Computer{public: void setbrand(const string& brand) { _brand = brand; } void setprice(const int& price) { _price = price; } private: string _brand; int _price;};int main(){ Computer p1; return 0;}
函数 ...