
C++
文章平均质量分 79
Zenhobby
这个作者很懒,什么都没留下…
展开
-
C++程序的编译过程
一:一般的C++应用程序的编译过程。 一般说来,C++应用程序的编译过程分为三个阶段。模板也是一样的。在cpp文件中展开include文件。将每个cpp文件编译为一个对应的obj文件。连接obj文件成为一个exe文件(或者其它的库文件)。下面分别描述这几个阶段。1.include文件的展开。 include文件的展开是一个很简单的过程,只是将include文件包转载 2015-03-07 14:42:32 · 1211 阅读 · 0 评论 -
Linux GDB core高级调试
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程转载 2017-07-20 00:57:27 · 2181 阅读 · 0 评论 -
C++覆盖、重写、重载的区别
Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。Override(覆盖):是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函转载 2015-03-07 10:38:17 · 2268 阅读 · 0 评论 -
C++双冒号和单冒号的用法区别
一.单冒号(:)1.用作位域标号 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这转载 2015-03-07 11:03:02 · 6905 阅读 · 0 评论 -
Windows堆和栈的比较
一、预备知识 程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(s转载 2015-03-09 14:31:18 · 1662 阅读 · 0 评论 -
区别cin,scanf,gets,getchar
gets 【1】函数:gets(字符指针) 【2】头文件:stdio.h(c中),c++不需包含此头文件 【3】原型:char*gets(char*buffer); 【4】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取(接受)的换行符被转转载 2015-03-27 22:20:02 · 1304 阅读 · 0 评论 -
C/C++中的字符串比较函数strcmp/memcmp/CString.Compare/CString:CompareNoCase
memcmp和strncmp的区别一、memcmp含义Compare characters in two buffers.int memcmp( const void* buf1, const void* buf2, size_t count );inline int wmemcmp ( const wchar_t* buf1, const wcha转载 2015-04-02 20:59:30 · 12356 阅读 · 0 评论 -
C++中的fstream/ifstream/ofstream和MFC中的CFile/CStdioFile
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:#include ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读取到内存中fst转载 2015-04-03 08:29:30 · 6848 阅读 · 1 评论 -
C++习题记录-牛客网
1 下面哪些调用转换支持可变长度参数 cdecl2 会导致用户进程从用户态切换到内核的操作是 a. 系统调用 b. 异常 c. 外围设备的中断 3 面向对象的基本原则 单一职责原则(Single-Resposibility Principle) 开放封闭原则(Open-Closed principle) 依赖倒置原则(Dependecy-Inversion P转载 2015-08-25 10:24:46 · 2075 阅读 · 0 评论 -
上一代C&C++测试框架TestNG++入门指导-补充和实践
本文是对 http://blog.youkuaiyun.com/sinojelly/article/details/5616671的转载和实践,是在实际搭建一次testngpp之后的回顾,作者发文至今已经有七年多的时间,这七年发生了很多事,对于文章来说最重要的事情则是VS2010,由于转载文章有些错误和过时的地方,更正也希望能够明确流程,能有借鉴。Testngpp介绍:参见转载文章:原创 2017-06-20 00:05:34 · 2288 阅读 · 1 评论 -
C++中的动态联编/静态联编及虚函数表
在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 1. 静态联编静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调用)与执行该操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联转载 2015-04-07 08:34:47 · 1924 阅读 · 0 评论 -
C++11新特性(原封不动转载待查)
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百科不是知道是台湾还是香港人翻译的然后由工具转换成简体中文的,有些术语和语言习惯和大陆程序不一样! 我决定结合这两个版本按照我自己的习惯把这篇文章整理到我的博客中.分享给关注我和关注C++11的朋友们.转载 2015-04-09 22:11:28 · 1124 阅读 · 0 评论 -
C++ RTTI特性:typeid/dynamic_cast及常用四种类型转换运算符
一、定义:RTTI:Run Time Type Identification ,运行时类型识别:指程序能够使用基类的指针或引用来检索其所指对象的实际派生类型。二、使用方式:C++中有两个操作符提供RTTI:(1)typeid 操作符:返回指针或引用所指对象的实际类型。(2)dynamic_cast 操作符:将基类类型的指针或引用安全地转换为派生类型的指针和引用。 注:此二操作符只为带有一个转载 2015-04-09 21:22:11 · 1480 阅读 · 0 评论 -
C++友元简介:友元函数,友元类和友元成员函数
友元简介:C++为了保证类的封装性,使私有部分和保护部分对外不可见,公有部分提供唯一的访问途径。(基类的保护部分在public,protected方式的派生类中,也对外提供访问途径,在派生类中访问权限同公有部分)。但这样的限制太严格,以至于不适合特定的编程,因此,C++提供了另一种形式的访问权限,即友元。使得可以访问友元所在类的私有部分和保护部分。友元与位于类的public,private转载 2015-04-09 16:50:14 · 1032 阅读 · 2 评论 -
c++继承中的内存布局(转载)
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ O转载 2015-04-09 16:19:40 · 721 阅读 · 0 评论 -
C++多态性的分类
多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是 “一种将不同的特殊行为和单个泛化记号相关联的能力”。和纯粹的面向对象程序设计语言不同,C++中的多态有着更广泛的含义。除了常见的通过类继承和虚函数机制生效于运行期的动态多态(dynamic polymorphism)外,模板也允许将不同的特殊行为和单转载 2015-03-07 10:30:26 · 1732 阅读 · 0 评论 -
linux下so库的加载和使用(dlopen/dlsym/dlclose)
转载自:http://www.cnblogs.com/gulvzhe/archive/2012/06/27/2565983.html一. 函数简介像window调用库文件一样,在linux下,也有相应的API因为加载库文件而存在。它们主要是以下几个函数:函数名功能描述dlopen打开对象文件,使其可被程序访问dls转载 2017-07-17 22:53:47 · 9802 阅读 · 0 评论 -
linux ioctl()函数详解
转载:http://www.cnblogs.com/geneil/archive/2011/12/04/2275372.html一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下: int ioctl(int fd, ind cmd,转载 2017-07-17 23:24:55 · 23165 阅读 · 0 评论 -
linux 共享内存的使用
一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影转载 2017-07-17 23:37:42 · 1317 阅读 · 0 评论 -
linux下的多线程/多进程同步/通信机制
一. 进程间通信linux下进程间通信的几种主要手段简介: 1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信; 2. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号转载 2017-07-17 23:51:51 · 5250 阅读 · 0 评论 -
IO多路复用之select、poll、epoll详解
转载:http://www.cnblogs.com/jeakeven/p/5435916.html目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,pselect,poll,epoll本质上都是同转载 2017-08-29 23:10:38 · 683 阅读 · 0 评论 -
C++模板类学习笔记
C++模板来源: http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html>模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。模板是一种对类型进行参数化的工具;通常有两种形式:函数模板和类模板;函数模板针对仅参转载 2015-04-08 22:18:37 · 660 阅读 · 0 评论 -
C++模板类的包含模式和编译错误的根本原因
前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。 我在5年前开始使用模板,那时我看到了MFC的容器类。直到去年我还没有必要自己编写模板类。可是在我需要自己编写模板类时,我首先遇到的事实却是转载 2015-04-09 15:05:13 · 1526 阅读 · 0 评论 -
C++ STL编程初步摘抄笔记:using stl/30分钟学会STL
网贴侵删,大爱无疆,知识无界。来源: http://net.pku.edu.cn/~yhf/UsingSTL.htm>这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以花了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。译者:karyconta转载 2015-04-10 21:49:59 · 1756 阅读 · 0 评论 -
C++ STL中的自定义Allocator
来源: http://www.cnblogs.com/wpcockroach/archive/2012/05/10/2493564.html>说一说C++里的allocator。我们知道,C++ STL里定义了很多的容器(containers),每一个容器的第二个模板参数都是allocator类型。比方说在VC10里,vector类的模板声明为: template > cla转载 2015-04-11 16:11:46 · 10869 阅读 · 0 评论 -
STL学习笔记-容器
转载自:http://blog.youkuaiyun.com/lwbeyond/article/details/7301443一.STL 组件1. 容器(Containers):用来管理某类对象的集合。2. 迭代器(Iterators):用来在一个对象群集的元素上进行遍历动件。迭代器的接口和一般指针差不多,以operator++累加,以operator* 提取所指的值。转载 2017-07-17 15:55:16 · 407 阅读 · 0 评论 -
STL学习笔记-迭代器
一. 迭代器类型Input迭代器 istreamOutput迭代器 ostreamForward迭代器Bidirectional迭代器 list, set, multiset, map,multimapRandom access迭代器 vector, deque,转载 2017-07-17 17:25:37 · 480 阅读 · 0 评论 -
网络编程常见面试题
1:多线程如何同步windows线程同步有四种方式:临界区、内核对象、互斥量、信号量。Linux线程同步有最常用的是:互斥锁、条件变量和信号量。2:epoll与select的区别select在一个进程中打开的最大fd是有限制的,由FD_SETSIZE设置,默认值是2048。不过 epoll则没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048转载 2017-07-08 23:35:25 · 1418 阅读 · 0 评论 -
Linux C 判断网络是否连接
1. 使用ioctl方法判断驱动状态#include #include #include #include #include #include #include struct ethtool_value { __uint32_t cmd; __uint32_t data;};int main(int , char*转载 2017-07-18 23:53:22 · 8158 阅读 · 0 评论 -
“精通”的代价--C++后端开发知识点
转载:https://github.com/chankeh/cpp-backend-reference/blob/master/back-end.md后端开发面试知识点大纲:语言类(C++):关键字作用解释:volatile作用Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从转载 2017-11-12 22:53:34 · 1364 阅读 · 1 评论 -
《Effective C++》读书摘要
来源: http://www.cnblogs.com/fanzhidongyzby/archive/2012/11/18/2775603.html> 最近刚读完侯捷的《Effective C++》,相对来说,这本书的内容比较贴近基础,对于刚掌握C++基础的人会有不少的提高。不过书中还是涉及了不少C++的高级特性,阅读起来需要查阅相关的资料。书中给出了大量的示例和代码来说明具体规则的原理,我转载 2015-04-13 22:13:13 · 2485 阅读 · 0 评论 -
C++ 将对象的构造和析构函数声明为Protected的结果
在看代码的过程中,有时会发现析构函数被定义成virtual,有一些没有定义成virtual但被放置于protected下。网上搜了下了解了原因,下面是较好的解答:1、如果一个类被继承,同时定义了基类以外的成员对象,且基类析构函数不是virtual修饰的,那么当基类指针或引用指向派生类对象并析构(例如自动对象在函数作用域结束时;或者通过delete)时,会调用基类的析构函转载 2015-04-14 21:53:21 · 2666 阅读 · 0 评论 -
C++ Object Model:C++对象模型
首先看下Point类class Point{public: Point( float xval ); virtual ~Point(); float x() const; static int PointCount();protected: virtual ostream& print( ostream &os ) const; flo转载 2015-04-14 15:02:26 · 644 阅读 · 0 评论 -
C语言运算符的优先级排序
先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .转载 2015-03-28 15:36:02 · 6340 阅读 · 0 评论 -
C++中的extern/static
参见文章:http://blog.youkuaiyun.com/deirdre/article/details/54526241、编译单元(模块): 编译单元就是指在编译阶段生成的每个obj文件,一个obj文件就是一个编译单元,也就是说一个cpp(.c)和它相应的.h文件共同组成了一个编译单元,一个工程由很多个编译单元组成,每个obj文件里包含了变量存储转载 2015-04-03 15:57:37 · 595 阅读 · 0 评论 -
C/C++ 内存分配:malloc/calloc/realloc/free和new/delete
realloc,malloc,calloc的区别三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 都在stdlib.h函数库内它们的返回值都是请转载 2015-03-31 17:04:03 · 2017 阅读 · 0 评论 -
C++中的iostream/iostream.h以及string/cstring/string.h/CString
C++的标准类库被修订了两次,有两个标准 C92和C99,这两个库现在都在并行使用,用 .h 包含的是c92 ,不带 .h 的是c99的头文件,对于普通用户来说这两者没有什么区别,区别是在内部函数的具体实现上。旧的C++头文件是官方明确反对使用的,但旧的C头文件则没有(以保持对C的兼容性)。据说从 Visual C++ .NET 2003 开始,移除了旧的 iostream 库。其实编译器制造转载 2015-04-02 09:29:27 · 3100 阅读 · 0 评论 -
C语言中的指针数组和数组指针
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2015-03-28 15:39:01 · 855 阅读 · 0 评论 -
C语言中的数值类型转换:整型提升/寻常算术变化/截断/强制类型转换
整型提升:K&R C中关于整型提升(integral promotion)的定义为:"A character, a short integer, or an integer bit-field, all either signed or not, or an object of enumeration type, may be used in an expression whereve转载 2015-03-30 19:51:42 · 4742 阅读 · 0 评论 -
C语言中的移位操作
1、什么样的数据类型可以直接移位char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以进行移位操作,而double、float、bool、long double则不可以进行移位操作。 2、有符号数据类型的移位操作对于char、short、int、long这些有符号的转载 2015-03-30 20:17:26 · 6443 阅读 · 0 评论