
c++
文章平均质量分 83
huangyimo
这个作者很懒,什么都没留下…
展开
-
c++前置声明
转自:http://blog.youkuaiyun.com/fjb2080/archive/2010/04/27/5533514.aspx 作者:清林,博客名:飞空静渡刚开始学习c++的人都会遇到这样的问题:定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样://a.h #include "b.h转载 2015-07-16 09:01:43 · 450 阅读 · 0 评论 -
JRTPLIB编译说出现的问题及解决方法(转载)
在vc6下编译jrtplib,但编译example1.cpp时产生了很多错误,有以下几种情况:1) Use Run-time Library的设置一定要统一。 2) VC产生的workspace的debug setting,默认有个GZ选项, Catch Release-Build Errors in Debug Build,编译的时候 会说error LNK2001:转载 2015-08-04 16:03:17 · 842 阅读 · 0 评论 -
C++中复制构造函数与重载赋值操作符总结
前言这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容:复制构造函数和重载赋值操作符的定义;复制构造函数和重载赋值操作符的调用时机;复制构造函数和重载赋值操作符的实现要点;复制构造函数的一些细节。复制构造函数和重载赋值操作符的定义我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数、析构函数、复制构造函数和重载赋值操作;即使在你没有明确定转载 2015-11-05 16:49:40 · 614 阅读 · 0 评论 -
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没转载 2015-11-05 10:32:03 · 382 阅读 · 0 评论 -
C++重载、重写、重定义
一、重载(overload)指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。(1)相同的范围(在同一个作用域中) ;(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。(5)返回值可以不同;二、重写(也称为覆盖 override)是指派生类重新定义基类的虚函数,特征是:(1)不在同一个作用域(分别位于派生类与基转载 2015-12-09 08:55:33 · 448 阅读 · 0 评论 -
使用do{ } while(0);有什么好处?
【gq414047080】:_Api(){ do { //do something }while(0);}这样的写法有什么好处啊?将楼主的问题扩展一下,do{} while(0);的用处都有什么?不仅限于楼主所贴代码的使用形式。这里整理一些(我觉得)比较有意义的回帖:【happynesslele】:有时转载 2015-11-03 11:13:59 · 556 阅读 · 0 评论 -
NetScheduleJobAdd函数添加任务计划的方法
//必须启动系统的Task Scheduler服务 [cpp] view plaincopy#include "stdafx.h" #include #include #include #include #include #pragma comment(lib,"NETAPI32.LIB")转载 2016-01-01 20:31:13 · 1081 阅读 · 0 评论 -
jrtplib学习之example1例程分析
本文主要讲解jrtplib源码中的example1例程,以及在jrtplib中常见的一些类的含义example1:[cpp] view plaincopyprint?/* Here's a small IPv4 example: it asks for a portbase and a destination and starts sendin转载 2016-01-21 18:50:35 · 470 阅读 · 0 评论 -
volatile编写多线程程序的好帮手
英文名称是 Generic: volatile — Multithreaded Programmer's Best Friend,原始出处也不想找了,网上有许多转载,下面是中文翻译,转载自:http://dev.youkuaiyun.com/htmls/83/83923.html 文章的中心思想是利用C++的类型检查机制,封装共享对象,在封装对象里进行同步,这样使得编译器通过语转载 2016-01-05 23:13:03 · 501 阅读 · 0 评论 -
类 this指针 const成员函数
Sales_data类的定义如下:#ifndef SALES_DATA_H#define SALES_DATA_H#include #include class Sales_data {public: std::string isbn() const {return bookNo;} Sales_data& combine(const Sales_data&);转载 2016-01-07 15:23:25 · 797 阅读 · 0 评论 -
深入探讨this指针
深入探讨this指针 为了写这篇文章,准备了好长时间,翻遍了箱底的书籍。但是现在还是不敢放开手来写,战战兢兢。不是担心自己写错,而是唯恐自己错误误导别人。同时也希望这篇文章能给你一点收获。既然是深入探讨this指针,所以建议初学者,最好具有一定编译基础,调试基础。如果大家认为这片文章有不满的地方,就给我发信批评一下,以便及时修正。关于this指针的描述我们一般从语言层次上讲;thi转载 2015-12-09 09:16:48 · 462 阅读 · 0 评论 -
终于明白了虚函数、纯虚函数和接口的实用方法和意义
从理论上来说,这三个概念很容易背的滚瓜烂熟,但是从大学毕业到现在,我都没真正搞明白这三个东西的出现,究竟是为了做到什么事情。也许之前我很少写代码,更很少写面向对象的代码,即使有写多半也很容易写回到面向过程的老路上去。在写面向过程的代码的时候,根本不管什么函数重载和覆盖,想到要什么功能就变得法子的换个函数名字,心里想想:反正函数重载本质也就是入栈了两个不同的函数。知道后来我才慢慢了解转载 2016-01-08 08:55:26 · 15021 阅读 · 7 评论 -
CLOSE_WAIT 状态以及应对策略
不久前,我的Socket Client程序遇到了一个非常尴尬的错误。它本来应该在一个socket长连接上持续不断地向服务器发送数据,如果socket连接断开,那么程序会自动不断地重试建立连接。 有一天发现程序在不断尝试建立连接,但是总是失败。用netstat查看,这个程序竟然有上千个socket连接处于CLOSE_WAIT状态,以至于达到了上限,所以无法建立新的socket转载 2016-08-15 16:13:16 · 397 阅读 · 0 评论 -
你所不知道的事儿--C++中delete指针后最好赋值为NULL
我们都知道,在C++中,用new声明的指针变量,都要delete。除非你完完全全使用智能指针,而不用担心内存泄露的问题。如果你是来自C Sharp阵营,那么也许你习惯于托管代码带来的好处,垃圾内存回收机制。但是C++中,需要手动进行释放,谁分配谁释放。首先,我要强调的一点就是delete是释放指针指向的内存,而并不是指针本身所占有的内存。 慢慢品味这句话。我们试图写下如下的转载 2016-08-18 19:41:33 · 1507 阅读 · 0 评论 -
c++对象内存模型【内存布局】
#类中的元素0. 成员变量 1. 成员函数 2. 静态成员变量 3. 静态成员函数 4. 虚函数 5. 纯虚函数#影响对象大小的因素0. 成员变量 1. 虚函数表指针(_vftptr) 2. 虚基类表指针(_vbtptr) 3. 内存对齐_vftptr、_vbtptr的初始化由对象的构造函数, 赋值运算符自动完成;转载 2016-08-08 11:34:31 · 295 阅读 · 0 评论 -
C++标准转换运算符static_cast
static_cast (expression)虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Package中使用;在方法中定义一个static变量,该变量在程序开始存在直到程转载 2016-08-10 20:20:44 · 523 阅读 · 0 评论 -
C++中的常对象和常对象成员
常对象常对象必须在定义对象时就指定对象为常对象。常对象中的数据成员为常变量且必须要有初始值,如Time const t1(12,34,36); //定义t1为常对象这样的话,在所有的场合中,对象t1中的所有数据成员的值都不能被修改。凡希望保证数据成员不被改变的对象,可以声明为常对象。定义常对象的一般形式为类名 const 对象名(实参列表);转载 2016-08-08 19:36:53 · 11004 阅读 · 5 评论 -
C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include转载 2016-08-20 18:00:13 · 292 阅读 · 0 评论 -
C++基类与派生类的转换
在公用继承、私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员。因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现。而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能转载 2016-08-21 15:24:28 · 753 阅读 · 0 评论 -
C++类型转换
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。一. const_cast常量指针被转化成非常量指针,并且仍然指向原来的对象。常量引用被转换成非常量引用,并且仍然指向原来的对象。去掉类型的 const 或 volatile 属性。转载 2016-08-10 10:26:59 · 227 阅读 · 0 评论 -
学习C++该看什么书?
C++学习之路 (一)语言入门:《C++ Primer》最新版本:第三版(第四版国外已上架,国内一些网上书店也在预订中)适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是好事。《The C++ Programming Language》/《C++程序设计语言》最新版本:第三版特别版转载 2016-08-10 10:44:40 · 1096 阅读 · 0 评论 -
C++中的内联函数inline总结
突然看到C++Primer中讲到,对于vector的一个循环,调用语句:(示例代码i=v.begin()不是很规范,虽然不会出错,客官请将就着看)[cpp] view plain copyfor (int i=v.begin() ; i{ .... } 对于size()的调用,其实是内联。想到以转载 2016-08-22 09:41:16 · 437 阅读 · 0 评论 -
C++用户自定义转换(User-Defined Conversion)
在计算机语言中,类型的存在让我们可以更有针对性的进行数据和功能的处理,但是却又存在了类型转化的问题。C++如同其他计算机语言一样,也同样都这些问题。不过它相对于C而言多了引用类型(Reference);相对与C#来讲,又多了指针类型(Point)。这似乎让它的类型转化变得更加扑朔迷离。也许是C方面知识的延续,我对C++的基础类型之间的转换还算比较清楚的,但是由于C#的Convert这个类库转载 2016-08-10 20:12:54 · 765 阅读 · 0 评论 -
C++标准转换运算符dynamic_cast
dynamic_cast (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。与static_cast一样,dynamic_cast的转换也需要目标类型和源对象有一定的关系:继转载 2016-08-12 10:48:23 · 330 阅读 · 0 评论 -
pragma warning
1 常用去警告: #pragma warning(disable:4035) //no return value #pragma warning(disable:4068) // unknown pragma #pragma warning(disable:4201) //nonstandard extension use转载 2016-09-05 16:17:16 · 346 阅读 · 0 评论 -
智能科普:VR、AR、MR的区别
近日, 获得谷歌5亿美元融资的技术公司Magic Leap在WSJD展会中放出了一段实录视频,引起不小骚动。如今,也有媒体称他们为MR公司,那么VR、AR、MR之间到底有什么区别呢。VR、AR、MR定义:什么是虚拟现实?虚拟现实(Virtual Reality,简称VR,又译作灵境、幻真)是近年来出现的高新技术,也称灵境技术或人工环境。虚拟现实是利用电脑模拟产生一个三维空间转载 2016-11-06 17:51:18 · 1120 阅读 · 0 评论 -
leveldb之cache
当向leveldb写入数据时,首先是将数据写入leveldb的Memtable(Memtable可能转化为IMMemtable)中,Memtable是存储在内存中的。只有经过compaction操作后,才会将内存中的数据写入到磁盘中的sstable中。 当要读数据时,首先在Memtable中查找,若没有找到,则在sstable中继续查找。而sstable是存储在磁盘中的,这样就需要进行多次磁盘转载 2016-11-15 17:20:57 · 563 阅读 · 0 评论 -
怎样理解阻塞非阻塞与同步异步的区别?
老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上转载 2016-12-29 10:44:17 · 263 阅读 · 0 评论 -
匿名namespace的作用
一。匿名namespace的作用在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则在链接阶段就会发生重定义错误,为了解决这个问题,我们可以在定义这些标识符(identifier)的时候加上static关键字修饰以限制它只在一个tu范围内可见。C++继承了C语言中static关键字的这个用途,我们依旧可以使用stati转载 2017-01-08 22:54:10 · 648 阅读 · 0 评论 -
大端小端格式详解
1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的cha转载 2017-03-30 08:53:58 · 436 阅读 · 0 评论 -
字符串
基本上求职者进行笔试时没有不考字符串的。字符串也是一种相对简单的数据结构,容易引起面试官反复发问。事实上,字符串也是考验程序员编程规范和编程习惯的重要考点。不要忽视这些细节,因为这些细节会体现你在操作系统、软件工程、边界内存处理等方面的知识掌握能力,也会成为企业是否录用你的参考因素。1、怎样将整数转换成字符串数,并且不用函数 itoa ? 答案:转载 2017-04-20 16:47:15 · 295 阅读 · 0 评论 -
C++临时对象
C++中有这样一种对象:它在代码中看不到,但是确实存在。它就是临时对象---由编译器定义的一个没有命名的非堆对象(non-heap object)。为什么研究临时对象?主要是为了提高程序的性能以及效率,因为临时对象的构造与析构对系统性能而言绝不是微小的影响,所以我们应该去了解它们,知道它们如何造成,从而尽可能去避免它们。临时对象通常产生于以下4种情况:类型装换按值传递按值返回对转载 2017-05-03 09:54:35 · 800 阅读 · 0 评论 -
如何学好C++语言
昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言。C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步。我转载 2017-05-12 09:57:43 · 338 阅读 · 0 评论 -
c++ 内联函数 (讲解的TM真好)
1. 内联函数在C++中我们通常定义以下函数来求两个整数的最大值:复制代码 代码如下:int max(int a, int b){ return a > b ? a : b;}为这么一个小的操作定义一个函数的好处有:① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多② 如果需要做任何修改,修改函数要比找出并修改每一处转载 2017-04-25 19:35:11 · 587 阅读 · 0 评论 -
c++中的隐藏、重载、覆盖(重写)
1 重载与覆盖 成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual关键字。转载 2017-04-27 10:06:27 · 298 阅读 · 0 评论 -
数据结构之最小堆的实现C++版
数据结构之最小堆的实现C++版 完全二叉树之所以用数组的方式存在,在于他的一个特性 若子节点为i,则父节点为(i-1)/2,注意c++特性,该结果肯定是个整数。若父节点为j,则子节点必为2*j+1;则在数组里面可以非常方便的通过下标去获取。建堆的核心思想: 堆在index的值为heap[index],然后其两个孩子的值边可求得,左孩子为heap[index*2+1],转载 2017-05-19 20:23:16 · 1988 阅读 · 0 评论 -
C++算法之 求二叉树的节点个数、深度、四种遍历方法
[cpp] view plain copy print?//节点的数据结构 class BTree { public: int m_nValue; BTree* m_nLeft; BTree* m_nRight; public: BTree(int value) { m转载 2017-05-20 10:10:20 · 10018 阅读 · 0 评论 -
C++标准转换运算符reinterpret_cast
reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了reinterpret_cast的字面意思:重新解释(类型的比特位)。我们真的可以随意将一个类型值的比特位交给另一个类型作为转载 2017-05-20 18:45:48 · 403 阅读 · 0 评论 -
C++常见关键字含义
1.1 inline定义内联函数,该关键字是基于定义的。如果只在函数声明时给出inline,则函数不会被认为是内联函数,所以必须在函数定义的地方也加上inline。其主要特性:一个函数若声明inline,则每处声明都必须保证是inline,类成员函数若在类定义内给出定义,则隐含inline。声明定义内联函数时,编译器将所调用的代码嵌入到主调函数中。编译器在必要或更符合预期的目标代码转载 2017-05-21 19:02:17 · 10700 阅读 · 1 评论 -
面向对象的三大特性,请用代码说明三大特性
面向对象(Object Oriented,缩写为OO)是现代软件技术的精髓。从早期的SmallTalk到如日中天的Java,都渗透着面向对象思想。 OO具有三大特性:封装性、继承性和多态性。想掌握面向对象思想,就必须深入理解 其三大特性。这里我尽量少谈概念,只用一个生活中的例子和一段代码来解释它们。 1、封装性(Encapsulation) 所谓封装,就是将某些东西包装和隐藏起来,让外界无转载 2017-05-21 20:26:18 · 1286 阅读 · 0 评论