C++
文章平均质量分 81
kmcfly
故不积蹞步,无以至千里;不积小流,无以成江海。
展开
-
c++ 静态绑定和动态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误,需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。关于对象的静态类型和动态类型,看一个示例:class B{}class转载 2014-06-20 09:21:00 · 410 阅读 · 0 评论 -
c++虚继承的概念
C++中虚拟继承的概念为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。class 派生类名:virtual 继承方式 基类名virtual是关键字,声明该基类为派生类的虚转载 2017-03-11 15:41:39 · 272 阅读 · 0 评论 -
C++程序员可能会犯的错误
如果调试程序是移除Bug的过程,那编写程序就是把Bug放进来的过程。-- Dijkstra 本文整理介绍了C/C++程序员在实际开发中,可能会犯下的常见错误。它们大多具有一定的迷惑性,初看起来似乎毫无问题,但实际运行起来竟完全不合常理。有些则是很多程序员未曾认真关注过的细节,当然对于一些不太主流的用法和技巧,或许笔者和各位都不打算在实际工作中来使用,但学习了解一下类似未尝试用转载 2016-10-11 16:56:12 · 789 阅读 · 0 评论 -
共享内存,共享缓冲区 一对多
produce:for(int i=0;iif(iter == VecS2SResult.end()){break;}if(g_Empty_sem_obj[i].sem_trywait()==0){//获取到信号量g_push_consume_cache[i].msgid = (*iter)["FmsgId"];g_push_consume_cache[i].a原创 2016-08-26 11:03:36 · 2786 阅读 · 0 评论 -
va_start va_end
void CTP::TPWarn(const char *fmt, ...){ char buff[256] = {0}; int used = 0; int size = static_cast(sizeof(buff)); va_list ap; va_start(ap, fmt); int ret = vsnprintf原创 2016-08-25 17:41:56 · 273 阅读 · 0 评论 -
va_start(),va_end()函数应用
可变参数,操作原理解释:VA_LIST 是在C语言中解决变参问题的一组宏,在头文件下。VA_LIST的用法: (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针 (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。转载 2016-07-28 11:30:04 · 457 阅读 · 0 评论 -
c++ 加载so动态库中的资源
#include #include #include #include //编译命令 g++ -m32 EncodeOrDecode.cpp -ldl -o edcode//名字通过nm -D xxxxxx.so获取using namespace std;int main(int argc,char **argv){void *handl原创 2016-07-06 20:07:38 · 1963 阅读 · 0 评论 -
C++ 用libcurl库进行http通讯网络编程
目录索引:一、LibCurl基本编程框架二、一些基本的函数三、 curl_easy_setopt函数部分选项介绍四、 curl_easy_perform 函数说明(error 状态码)五、libcurl使用的HTTP消息头六、多线程问题七、什么时候libcurl无法正常工作八、关于密码九、HTTP验证十、代码示例1.基本的http GET/POST操转载 2016-07-14 12:57:24 · 2549 阅读 · 0 评论 -
string 序列化
int u_split(const string s, vector &v, const char *flag){string tmp;size_t b = 0, e = 0;int l = strlen(flag);v.clear();if (s.size() == 0)return 0;while ((e = s.find(flag, b原创 2016-07-22 17:42:48 · 1699 阅读 · 0 评论 -
c++ 智能指针
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p转载 2016-03-14 20:13:47 · 319 阅读 · 0 评论 -
虚析构函数作用
虚析构函数的作用转载▼标签:杂谈 例1:1 class ITest2 {3 public: 4 virtual void Test() = 0;56 };78 class CTest : public ITest9 {10 public:11 CTest() {转载 2014-06-20 11:14:25 · 575 阅读 · 0 评论 -
String类 默认生成的函数
String类中系统默认实现了4个函数,但是在程序中我们常常自己要去实现,下面就是实现的代码:在使用String的过程中,如果拷贝构造函数和赋值函数采用了系统设计的话,会出现错误,因为系统只是实现了浅拷贝,也就是只用了指针赋值的形式,这样往往在程序设计的过程中出现错误。所以如果自己用到了,一定要自己实现:[cpp] view plain copy转载 2016-03-07 14:03:32 · 478 阅读 · 0 评论 -
c++ 编程 几个有用的宏
1. 打印错误信息如果程序的执行必须要求某个宏被定义,在检查到宏没有被定义是可以使用#error,#warning打印错误(警告)信息,如:#ifndef __unix__#error "This section will only work on UNIX systems"#endif只有__unix__宏被定义,程序才能被正常编译。 2. 方便调试__FIL转载 2015-08-12 10:36:23 · 538 阅读 · 0 评论 -
linux C++ 线程池框架
本 文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行 任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简 单。 为什么需要线程池目前的大多数网络服务器,包括Web服务器、Email服务器转载 2015-05-19 19:58:30 · 555 阅读 · 0 评论 -
C++ 强制类型转换
static_cast揭密(转)原文链接:What static_cast本文讨论static_cast和 reinterpret_cast。介绍大多程序员在学C++前都学过C,并且习惯于C风格(类型)转换。当写C++(程序)时,有时候我们在使用static_cast和reinterpret_cast时可能会有点模糊。在本文中,我将说明static_cast实际上做了什么,并且转载 2014-06-20 11:09:27 · 610 阅读 · 0 评论 -
虚函数 虚继承 抽象类
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。是C++中多态性的一个重要体现,利用基类指针访问派生类中的成员 函数,这种情况下使用虚函数,这种情况下采用的是动态绑定技术。 虚函数必须是基类的非静态成员函数,其访问权限可以是pro转载 2014-06-20 11:07:53 · 622 阅读 · 0 评论 -
virtual public 含义
在类重载中我们一般使用以下的方式: class Base { void Echo() { printf( "Echo from Base ");} }; class Middle : public Base {} class Child : public Middle {} 可以很清转载 2017-03-14 21:01:24 · 945 阅读 · 0 评论