
C++
文章平均质量分 87
ljx0305
这个作者很懒,什么都没留下…
展开
-
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.youkuaiyun.com/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板转载 2008-02-13 22:26:00 · 829 阅读 · 0 评论 -
C++中几个比较不常用的关键字
mutable关键字 关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员 我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变, 对像的状态也会随之发生变化! 如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是 该函数不会修改类的非静态数据成员.但是有些时候需要在该转载 2008-04-20 19:27:00 · 696 阅读 · 0 评论 -
我眼中的指针--学习指针不可少的好文章
为初学者服务。这是我的帖子的宗旨。我也是个初学者(强调了无数遍了) ,我以我的理解把初学者觉得难懂的东西用浅显的语言写出来。由于小学时语文 没学好,所以竭尽全力也未必能达到这个目的。尽力而为吧。 指针是c和c++中的难点和重点。我只精通dos下的basic。c语言的其它各种特 性,在basic中都有类似的东西。只有指针,是baisc所不具备的。指针是c的灵魂 。 我不想重复大多数书上说得很清楚的东转载 2008-04-27 22:46:00 · 721 阅读 · 0 评论 -
重载、覆盖、多态与函数隐藏
重载、覆盖、多态与函数隐藏 经常看到C++的一些初学者对于重载、覆盖、多态与函数隐藏的模糊理解。在这里写一点自己的见解,希望能够C++初学者解惑。 要弄清楚重载、覆盖、多态与函数隐藏之间的复杂且微妙关系之前,我们首先要来回顾一下重载覆盖等基本概念。 首先,我们来看一个非常简单的例子,理解一下什么叫函数隐藏hide。#include using namespac转载 2008-05-05 19:27:00 · 1092 阅读 · 0 评论 -
VC下的ADO编程入门
VC下的ADO编程入门 n 新建一基于对话框的应用程序zjy,在对话框上添加一个列表框和一个按钮,用ClassWizard给列表框添加一个变量m_listn 在StdAfx.h头文件的所有include语句下面添加如下一条语句#import "c:/program files/common files/system/ado/msado1转载 2008-05-05 19:38:00 · 1704 阅读 · 0 评论 -
Developing COM Components using VC-ATL
第一节 用ATL创建COM组件在 Project Name 编辑框中输入项目名如 MyProj ,并选择合适的 Location 后,按确认按钮进入下一个对话框:ATL COM Appwizard - step 1 of 1,在 Server Type 中选择 Dynamic Link Library [ DLL ],即进程内服务器,这是最快的组件。选中 Supp转载 2008-05-05 19:50:00 · 1934 阅读 · 0 评论 -
C++ 运算符优先级列表
C++ Operator PrecedenceThe operators at the top of this list are evaluated first. Precedence Operator Description Example原创 2008-05-06 13:10:00 · 1053 阅读 · 0 评论 -
sizeof,字节对齐,多继承,虚拟继承,成员函数指针
关键字:sizeof,字节对齐,多继承,虚拟继承,成员函数指针前向声明:sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话,那么这篇文章对转载 2008-05-08 23:48:00 · 1518 阅读 · 0 评论 -
ASCII表
ASCII表 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符转载 2008-05-08 23:53:00 · 549 阅读 · 0 评论 -
含位域结构体的sizeof
使用位域的主要目的是压缩存储,其大致规则为:1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;3) 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev原创 2008-05-08 23:30:00 · 816 阅读 · 0 评论 -
C/C++堆、栈及静态数据区详解
五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操转载 2008-05-08 23:50:00 · 672 阅读 · 0 评论 -
如何理解c和c ++的复杂类型声明
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 需要强调一下的是,复杂的C/C++声明并不是好的编程风格转载 2008-07-17 23:02:00 · 564 阅读 · 0 评论 -
含位域结构体的sizeof
使用位域的主要目的是压缩存储,其大致规则为:1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;3) 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev转载 2008-05-08 23:54:00 · 516 阅读 · 0 评论 -
gdb参数详解
名称 gdb - GNU 调试器提要 gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core] [-x cmds] [-d dir] [prog[原创 2008-07-27 18:38:00 · 887 阅读 · 0 评论 -
strcpy实现
题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char * s转载 2008-07-27 18:44:00 · 774 阅读 · 1 评论 -
判断一个变量是无符号的还是有符号
首先将0赋给要判断的变量(a)然后判断 变量(a)是否小于变量(a)-1,如果条件为真,则变量(a)为无符号数,否则变量(a)为有符号数。代码: unsigned int a = 0; if(a printf("/nunsiged"); }else{ printf("/nsigned"); }分析:如果变量(a)为无符号数,小于号左边为无符号数,右边为-原创 2008-07-27 18:51:00 · 941 阅读 · 0 评论 -
重载new 和 delete
一、重载规则I.可以重载的操作符+- */ %^& |~ !=>*=/= %=^=&=|=>>>===!=>= ||++-- ->*,->[]() operator new operator new[]operator delete operator delete []II.不能重载的操作符:: . .* ?:sizeof typeid new deletestatic_ca转载 2008-07-27 18:27:00 · 1625 阅读 · 1 评论 -
C++箴言:理解new-handler的行为
当 operator new 不能满足一个内存分配请求时,它抛出一个 exception(异常)。很久以前,他返回一个 null pointer(空指针),而一些比较老的编译器还在这样做。你依然能达到以前的目的(在一定程度上),但是我要到本文的最后再讨论它。 在 operator new 因回应一个无法满足的内存请求而抛出一个 exception 之前,它先调用一个可以由客户指定的被称为 ne原创 2008-07-27 22:45:00 · 700 阅读 · 0 评论 -
如何理解c和c ++的复杂类型声明
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 需要强调一下的是,复杂的C/C++声明并不是好的编程风格;转载 2008-05-15 19:59:00 · 623 阅读 · 1 评论 -
完成端口的Win32实例及ACE实现对比
完成端口(IOC)是用来实现高性能服务的一种常用方法,主要是通过操作系统提供的异步调用功能实现IO操作,可以通过很少的线程数实现高性能的并发服务。ACE的前摄器(Proactor)模式在Windows下就是通过完成端口实现的。 1.下面是网上一个利用完成端口技术实现的高性能文件下载服务程序的源码:(用Visual C++ 6.0 SP5+2003 Platform SDK编译通过)转载 2008-05-15 20:03:00 · 729 阅读 · 0 评论 -
【小猪原创】手把手教你玩转SOCKET模型之 重叠I/O 篇
建议大家还是到我的blog上看彩版的吧,清晰醒目,我帖在这里只是为了引起大家注意..-_-b 在这里看这么多字简直是折磨自己的双眼啊...... “身为一个初学者,时常能体味到初学者入门的艰辛,所以总是想抽空作点什么来尽我所能的帮助那些需要帮助的人。我也希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯付出时的吝啬。”转载 2008-05-15 20:40:00 · 676 阅读 · 0 评论 -
ACE网管平台移植Linux
我们的网管平台基于ACE, ODBC,SNMP ++的,都是可以跨平台的库,但一直未进行linux下的编译测试,这是去年移植测试时记录的日志。 注意移植前先要编译好ACE, unixODBC,SNMP ++的库。 在从VC下移植到linux(用gcc编译)过程中记录的一些更改项: 1)微软windef.h文件中定义的内容linux下不可用,包括#define MAX_P转载 2008-05-15 21:00:00 · 918 阅读 · 0 评论 -
C语言面试题总汇
C语言面试题总汇4. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9. 全局变量和局转载 2008-05-14 22:30:00 · 1907 阅读 · 0 评论 -
volatile的作用
volatile的作用一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-a转载 2008-07-30 09:58:00 · 699 阅读 · 0 评论 -
volatile--编写多线程程序的好帮手
并不是我故意想弄糟你的心情,但是在这期专栏里,我们将讨论多线程编程这一话题。正如上一期Generic里所说的,编写异常安全(exception-safe)的程序是非常困难的,但是和编写多线程程序比起来,那简直就是儿戏。多线程的程序是出了名的难编写、难验证、难调试、难维护,这通常是件苦差事。不正确的多线程程序可能可以运行很多年也不出一点错,直到满足某些临界的条件时,才出现意想不到的奇怪错误。不转载 2008-07-30 10:13:00 · 778 阅读 · 0 评论 -
_stdcall _cdecl _fastcall 详细说明
(1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: #define WINAPI _stdcall 按C编译方式,_stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_function转载 2008-07-30 11:32:00 · 680 阅读 · 0 评论 -
分析虚函数
其实虚函数在编译器中的实现是非常简单的,直接翻vc2005编译出来的汇编便可以知道。 比如下个程序: C/C++ code <!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include iostream转载 2008-07-31 09:48:00 · 681 阅读 · 0 评论 -
对轻量级C++日志类的增强
对轻量级C++日志类的增强这是网上找到的一个轻量级C++日志类的实现,主要应用了Singleton模式,我增加一个函数tmWrite,主要用来进行前面带时间的行输出。 //log.h//hujinshan@2004.1.3 Airforce Engineering University/*//CLog* CLog::_instance = NULL; CL原创 2008-05-15 20:53:00 · 1439 阅读 · 0 评论 -
宏定义中的## 连接符与# 符
## 连接符与# 符 ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个原创 2008-05-15 22:17:00 · 689 阅读 · 0 评论 -
static全局变量与普通的全局变量的区别
1)static全局变量与普通的全局变量有什么区别?(2)static局部变量和普通局部变量有什么区别?(3)static函数与普通函数作用域有什么不同点?(4)static函数与普通函数有什么区别?(1)static全局变量与普通的全局变量有什么区别?答:全局变量(外部变量)的说明之前再加以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两转载 2008-05-14 21:39:00 · 1254 阅读 · 0 评论 -
用完成端口开发大响应规模的Winsock应用程序
通常要开发网络应用程序并不是一件轻松的事情,不过,实际上只要掌握几个关键的原则也就可以了——创建和连接一个套接字,尝试进行连接,然后收发数据。真正难的是要写出一个可以接纳少则一个,多则数千个连接的网络应用程序。本文将讨论如何通过Winsock2在Windows NT? 和 Windows 2000上开发高扩展能力的Winsock应用程序。文章主要的焦点在客户机/服务器模型的服务器这一方,当然,其中转载 2008-05-15 20:44:00 · 584 阅读 · 0 评论 -
C语言中的关于“位域”的说明
关键词: sizeof 1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (incl转载 2008-05-20 22:51:00 · 724 阅读 · 0 评论 -
C++箴言:理解typename的两个含义
C++箴言:理解typename的两个含义问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? template class Widget; // uses "class"template class Widget; // uses "typename"原创 2008-05-31 17:40:00 · 551 阅读 · 0 评论 -
虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X) 一. 虚析构函数我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数。如:class Base...{public: Base()...{} virtual ~Base()...{}};class Deriv转载 2008-06-01 21:25:00 · 597 阅读 · 0 评论 -
宏与内联函数(面试常考)
宏与内联函数(面试常考)第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空转载 2008-06-01 21:13:00 · 664 阅读 · 1 评论 -
右左法则----复杂指针解析
因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:The right-left rule: Start reading转载 2008-06-01 23:25:00 · 618 阅读 · 0 评论 -
C++中struct与class的区别
C++中struct与class的区别从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别: (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理; (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。 除了这两点,class和s转载 2008-06-01 20:53:00 · 768 阅读 · 0 评论 -
局部类和嵌套类
局部类和嵌套类局部类 在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。 int a; void fun() { static int s; clas转载 2008-06-01 23:36:00 · 645 阅读 · 0 评论 -
从一道题谈C++中构造函数调用构造函数
从一道题谈C++中构造函数调用构造函数题目如下:问下列代码的打印结果为0吗? #include cstdlib>#include iostream>using namespace std;struct CLS...{ int m_i; CLS( int i ) : m_i(i)...{} CLS() ...{ CLS(0); //这里转载 2008-06-01 21:09:00 · 588 阅读 · 0 评论 -
虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X) 一. 虚析构函数我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数。如:class Base...{public: Base()...{} virtual ~Base()...{}};class Deriv转载 2008-06-01 21:26:00 · 580 阅读 · 0 评论