随笔分类 -  C++

摘要:A.h定义一个类,B.h中也定义一个,A.h中include B.h,同时A类也定义了一个B类指针,同样B.h include 了A.h,也有一个A类指针,当然头文件中有pragma once,但是编译时A.cpp说找不到B这个标识符,同样B中也找不到A,好像没包含一样:解决方法:A.h和B.h互相彼此包含,将导致编译器无休止的彼此包含,所以编译器会报错。正确的做法是采用类前声明,方法避免循环包含。具体做法如下:A.h中写#include "B.h"在A.h中可以直接定义类B的对象;比如 B m_b;而在B.h中不能直接写#include "A.h"应该 阅读全文
posted @ 2012-03-13 10:15 王帅901 阅读(971) 评论(0) 推荐(0)
摘要://禁止在heap中class number{ private: static void*operator new(size_t size); static void operator delete(void*ptr); ..........};//禁止在栈上class number{ private: ~number(); public: void destory()const{delete this;} ............} 阅读全文
posted @ 2012-02-18 10:52 王帅901 阅读(192) 评论(0) 推荐(0)
摘要:问大家个问题vector<string> s1;vector<string> s2;假如s1是s2的超集,如果要把s1中不属于s2的部分取出来 怎么做好什么方法都可以 1 #include<vector> 2 #include<string> 3 #include<algorithm> 4 #include<iterator> 5 #include<iostream> 6 using namespace std; 7 8 int main() 9 { 10 vector <string> s1; 1 阅读全文
posted @ 2012-02-04 10:56 王帅901 阅读(161) 评论(0) 推荐(0)
摘要:1:很多时候,需要把server端范虎的数据打印出来,这时候: 永远记得不要使用 printf 永远不要把从网络接收到的文本作为第一个参数传递给printf() 它会引起严重的安全性问题,药代之以使用fputs()eg: fputs(msg,stdout); fputs(msg,stderr);2: TCP server端: 使用socket 创建TCP套接字; 使用bind给套接字分配端口号; 使用Listen()告诉系统允许对该端口建立连接; 之后反复执行以下操作: 这四个字太TM传神了。。。 1: 调用accept()为每个客户连接获取新的套接字; 2: 使用sen... 阅读全文
posted @ 2011-11-29 14:48 王帅901 阅读(226) 评论(0) 推荐(0)
摘要:狭义的说,QT的布局管理框架指的是以QLayoutItem/QLayout为基类的布局管理体系(应该说,对于QGraphicsSystem, 还有以QGraphicsLayoutItem/QGraphicsLayout为基类的一系列相关子类)但是如果广义的说,布局就是管理控件的位置和尺寸的话,在QT中一共有三种方式绝对定位:在代码中调用QWidget::setGeometry()函数,对控件进行绝对定位手工定位:在resizeEvent等函数中,根据参数变化,撰写代码对控件进行定位使用布局管理器定位:使用QLayout类管理控件布局 VS 控件在GTK中,Layout和Widget并没有截然分 阅读全文
posted @ 2011-11-19 12:39 王帅901 阅读(1730) 评论(0) 推荐(0)
摘要:QDialog类下有一个虚函数void QDialog::closeEvent (QCloseEvent*e)[virtual protected]通过实现closeEvent函数,就可以以对关闭窗口消息进行拦截,比如程序还没有完成工作时,可以弹出警告窗口,即使用户确认退出操作在头文件中,需要加入#include <QCloseEvent>:#ifndef TEST_H#define TEST_H#include <QDialog>#include <QCloseEvent>class ClientTest : public QDialog{ Q_OBJEC 阅读全文
posted @ 2011-11-13 12:45 王帅901 阅读(1950) 评论(0) 推荐(1)
摘要:http://www.cnblogs.com/amboyna/archive/2008/02/06/1065322.html这篇文章写得很详细 阅读全文
posted @ 2011-10-15 21:43 王帅901 阅读(146) 评论(0) 推荐(0)
摘要:1: lexical_cast 转化 string =3333333333; 超过int 型表示范围 但不超过unsigned int 型 这样是可以的。。。 完全抛弃了什么atoi atol strtol 神马神马的 太简单咯。。。#include <iostream>#include <boost/lexical_cast.hpp>using namespace std;using namespace boost;int main(){ string str = "33333333333"; unsigned long long int num 阅读全文
posted @ 2011-10-15 01:02 王帅901 阅读(191) 评论(0) 推荐(0)
摘要:今天的调试问题多多:1 : string a = char * b; 这里a并不知道b的长度 因此会在/0 处截断 这样子如果把string 做 存储二进制数据用 必然会错。。。 解决办法: 1: 在类中纪录长度 2: 在内存中存储ascii码形式的二进制数据 读出写入的时候 记得要做个转化 详见我的中心站网管程序 NMCStation 中的 getBinaryEncrypt那几个函数2: char a= 0xef; if(a>=0x10) 这样比较大小竟然不行。。。 不知道为什么现在。。。 int a = 0xef; if(a>=0x10) 这样子比较是可以... 阅读全文
posted @ 2011-10-10 01:14 王帅901 阅读(154) 评论(0) 推荐(0)
摘要:详见 这篇文章: http://www.cnblogs.com/WuErPIng/archive/2005/04/22/143267.html一开是我想使用sleep(1) 测试 progress_timer但是发现 始终 消耗时间 都为0 重点是这里:为什么不用sleep就可以得到流逝的时间呢(cin.get()也不能得到)。推其原因在于linux平台上sleep时,clock是获得CPU被使用的时间。而这时进程会等待一个 signal,这一段时间CPU不会被使用,clcok()认为时间没有流逝所致。而windows平台却是认为Sleep时也是有时间流逝的,而不是看 CPU有没有被使用,我也 阅读全文
posted @ 2011-10-01 16:30 王帅901 阅读(335) 评论(0) 推荐(0)
摘要:1: 发现一个很诡异的问题:#include <iostream>#include <boost/asio.hpp>#include <iostream>#include <boost/date_time/posix_time/posix_time.hpp>using namespace std;void print(const boost::system::error_code& /*e*/){ std::cout << "Hello, world! ";}//int main(){ boost::asi 阅读全文
posted @ 2011-09-26 00:01 王帅901 阅读(437) 评论(0) 推荐(0)
摘要:1: sudo apt-get install libboost-dev libboost-dbglibboost-doc bcp libboost-* 这个直接就装好了。。。2:boost 有些头文件是不需要调用链接库的。。。 就比如说bind 应为他们是纯模板实现。。。 实现在头文件里咯3: 记得要在gcc C++ linker 中 添加需要的 链接库名字 阅读全文
posted @ 2011-09-25 23:54 王帅901 阅读(220) 评论(0) 推荐(0)
摘要:今天在搞嵌入式设备时,发现一个关于时区的问题: 我调用time(NULL) 得到当前系统的UTC时间 再用localtime(xx) 将这个UTC时间解析成本地时间时,采用设置好时区的Ubuntu可以正确得出 但是将该程序编译好之后,放到嵌入式设备上面运行,发现时间少了8小时。 1: 说明这是我动态编译的结果,改程序会在嵌入式内核中动态调用localtime这个API 从而得到0时区的本地时间 可以尝试在Ubuntu编译的时候 用 gcc -static 编译 强制生成 静态编译后的结果 (没有试过,不过感觉应该可以) 2: 袁师兄说 重新编译内核,在编译模块中加上RTC模块,之后boo... 阅读全文
posted @ 2011-09-21 22:22 王帅901 阅读(206) 评论(0) 推荐(0)
摘要:1: 环境变量: export 输出所有 export PATH=$PATH:/tmp/ 加入/tmp/到PATH路径下 查看 vim ~/bash_profile 可以看到当前用户对PATH路径的一些修改情况 对于非root用户 可以更改 ~/.bashrc export PATH=$PATH:/tmp/什么的来直接更改 重启终端生效 但是这种更改对root不起作用 对于root用户 可以更改 /etc/profile 重启中断2:双引号用来避免 shell 处理特殊字符,比如空格、星号等。单引号和双引号类似,区别在于对环境变量的处理上,单引号不替换环境变量。例如$ echo "Y 阅读全文
posted @ 2011-09-20 17:07 王帅901 阅读(184) 评论(0) 推荐(0)
摘要:1:#include <boost/smart_ptr.hpp>#include <iostream>#include <string>using namespace std;using namespace boost;int main(){ int *a = new int(10); { scoped_ptr<int> sp (a); cout<<*sp<<endl; //10 } cout<<*a<<endl; //8916792}注意这里,只有一份拷贝,因此不管是 scoped_ptr 出作用 阅读全文
posted @ 2011-09-16 11:54 王帅901 阅读(902) 评论(0) 推荐(0)
摘要:1: 我一般习惯于把<<操作符重载成friend函数 class station{public: string m_info; station(string info):m_info(info){cout<<"construct!"<<endl;}; ~station(){cout<<"destruct!"<<endl;}; friend ostream &operator <<(ostream &os,station & sta);};ostream &am 阅读全文
posted @ 2011-09-08 22:27 王帅901 阅读(425) 评论(0) 推荐(0)
摘要:1: 序列容器: vector string deque list 关联容器: set multiset map multimap1:是否需要在容器任意位置插入元素: 序列容器可以 关联容器不行2:是否是需要随机访问: 是: string vector deque3:插入删除多么?是的话 就要避免连续内存的容器4: vector 是唯一与C的布局兼容的容器5:节点型容器 插入删除时 迭代器不会失效(除非迭代器指向正在操作的元素) 阅读全文
posted @ 2011-09-08 21:06 王帅901 阅读(176) 评论(0) 推荐(0)
摘要:1:编译器拒绝将virtual 函数 声明为inline 的这是显而易见的 因为virtual 函数 只有在运行期间 才确定最终要调用哪个函数 而inline函数 在编译期间 就确定要调用哪个函数了同时在debug中 可以在inline 函数中设置断点!对于inline 函数: inline 函数 无法 随着 程序库的升级而升级 如果f 是函数库中的一个inline函数 客户将f() 编入其程序中一旦程序库设计者决定改变 f() 所有用到f() 的客户端 程序都必须重新编译 如果f() 是非inline函数 客户端就只需要重新链接就好如果程序库采用动态链接 升级版函数甚至可以 不知不觉的 .. 阅读全文
posted @ 2011-09-08 18:31 王帅901 阅读(208) 评论(0) 推荐(0)
摘要:1: RAII 资源获得时机便是初始化时机 典型应用: 智能指针!2: 为什么 auto_ptr 指针复制之后 原指针就会变成NULL : 多分指针指向它 会被析构多次 delete 函数会多次调用3: 我要再次留心 stl容器的数据结构 与 特性4: 对于heap-based 资源 用shared-ptr 比较好 但是对于 栈上资源 还是用 自己的资源管理类比较好5: shared_ptr 对象在引用计数 为零的时候 会delete raw ptr 但这不是必需的 你可以用例如:shared_ptr<Mutex> mutexPtr(rawPtr,unlock); // unloc 阅读全文
posted @ 2011-09-08 11:45 王帅901 阅读(186) 评论(0) 推荐(0)
摘要:1: C++ 不允许让reference 更改指向的对象 int main(){ string value("wangshuai"); string &a = value; cout<<&a<<endl; string minhua("wuawuawua"); a = minhua; cout<<&a<<endl; cout<<value<<endl; cout<<minhua<<endl; return 0;}输出结果:0x22ff0 阅读全文
posted @ 2011-09-07 16:52 王帅901 阅读(451) 评论(0) 推荐(0)