C++基础
文章平均质量分 66
desow
这个作者很懒,什么都没留下…
展开
-
防止可重入:一个有趣的类和一个很有用的宏!
这几天在研究Todolist源码,看到一简短的类,很很有意思,现把源码列下,并附上简短说明: // macro to help prevent re-entrancy in functions //定义一个宏AF_NOREENTRANT,防止函数中可重入#define AF_NOREENTRANT / static BOOL bAFInHere = FAL原创 2009-09-07 10:57:00 · 1406 阅读 · 0 评论 -
私有成员函数一定不能被外部调用吗?
一般情况下私有成员函数一定不能被外部调用,但是虚拟私有成员函数是可能被外部调用的。请看例子: #include "stdafx.h"#include using namespace std;class base{public: void a() {cout<<"base::a"<<endl;}; void b() {cout<<"base::b"<<endl原创 2009-09-28 17:01:00 · 6685 阅读 · 2 评论 -
C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
内存分配方式 内存分配方式有三种: [1] 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量, static 变量。 [2] 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中 ,效率很高,但是分配的内存容量有限。 [3] 从堆上分配,亦转载 2009-10-08 16:44:00 · 996 阅读 · 1 评论 -
部分IT公司笔试算法题
部分IT公司笔试算法题1、将一整数逆序后放入一数组中(要求递归实现)void convert(int *result, int n) { if(n>=10) convert(result+1, n/10); *result = n%10; }int main(int argc, char* argv[]) { int n = 123456789, result[20]={}; convert(r原创 2009-10-08 16:53:00 · 993 阅读 · 1 评论 -
内存操作
使用下列函数在内存区域进行基于字节的工作。 内存操作函数: 1.memcppy 将指定的字符或指定数量的字符从一个 buffer 复制到另一个 buffer . void *_memccpy( void *dest, const void *src, int c, unsigned int count ); 所需头文件: or 返回值: 如果字符转载 2009-10-15 08:44:00 · 819 阅读 · 0 评论 -
关于GlobalAlloc,GlobalLock,GlobalUnLock
调用GlobalAlloc函数分配一块内存,该函数会返回分配的内存句柄。 调用GlobalLock函数锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针。 您可以用该指针来读写内存。 调用GlobalUnlock函数来解锁先前被锁定的内存,该函数使得指向内存块的指针无效。 调用GlobalFree函数来释放内存块。您必须传给该函数一个内存句柄。GlobalAllo转载 2009-10-14 15:54:00 · 1100 阅读 · 0 评论 -
操作符重载手册
原文件出处:http://www.adintr.com/program/article/05.oper.html一、重载规则I.可以重载的操作符+-*/%^&|~!=>+=-=转载 2009-10-24 23:50:00 · 745 阅读 · 0 评论 -
用VC6进行UNICODE编程
用VC6进行UNICODE编程最近试图将自己的程序编译成Unicode版本,费了不少力气,相关内容整理如下,适用于VC6,但VC7、VC8应该也差不多的(后者新建项目缺省即按Unicode编译)。1. 添加 UNICODE 和 _UNICODE 预处理定义位置:Project Settings -> C/C++ -> Preprocessor definitions添加了原创 2009-11-11 13:42:00 · 821 阅读 · 0 评论 -
VC调试无法进入断点解决方法。
以前也碰到过同样的问题,但没有问个为什么,也没有探个究竟。昨天调试一个DLL,添加输出信息吧,太麻烦而且不容易定位,但设置断点后按“F5”,断点不可用,气泡提示“当前不会命中断点,还没有为该文档加载任何符号。”再右键->“位置”->“允许源代码与原始版本不同”,还是不行。77777我还不信了,整它! 后来才发现,“Alt+F7”->“配置属性”->“调试”->“命令”中输入的转载 2009-11-20 18:31:00 · 23784 阅读 · 4 评论 -
C++多态行为的不确定性
最近做一个项目,使用了一个抽象类的线程类,使用的时候发现有时会出现调用纯虚函数的情况,代码如下:class Thread{public: Thread(int InitFlag=CREATE_SUSPENDED); ~Thread(); HANDLE m_ThreadHdl;private: virtual bool Execute()=0; static un原创 2009-12-17 18:26:00 · 2075 阅读 · 2 评论 -
有效运用auto_ptr
很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它。这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码。本文阐述了如何正确运用auto_ptr来让你的代码更加安全——以及如何避免对auto_ptr危险但常见的误用,这些误用会引发间断性发作、难以诊断的bug。1.为什么称它为“自动”指针?auto_ptr只是众多可转载 2009-12-17 20:07:00 · 599 阅读 · 0 评论 -
windows编程中文件操作的几种方法
windows编程中文件操作有以下几种常见方法:1.C语言中文件操作。2.C++语言中的文件操作。3.Win32 API函数文件操作。4.MFC CFile类文件操作。5.MFC CFileDialog类的文件操作。6.注册表文件操作。下面我来详细说明一下各种文件操作方法:1. C语言中文件操作.需要包含的头文件STDIO.H 写入文件: FILE *pfile=fopen("C.t转载 2009-12-18 15:16:00 · 1298 阅读 · 0 评论 -
SQLITE3 在VC/MFC 中使用的一点体会
SQLITE简介:This is an extension for the SQLiteEmbeddable SQL Database Engine. SQLite is a C library that implements anembeddable SQL database engine. Programs that link with the SQLite library c转载 2010-03-02 18:05:00 · 2598 阅读 · 0 评论 -
字符串操作
CString 操作指南原创 2009-12-27 17:30:00 · 736 阅读 · 0 评论 -
C/C++ 程序员应聘常见面试试题深入剖析
1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。 许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都转载 2009-09-25 23:31:00 · 1252 阅读 · 0 评论 -
define宏定义中的#,##,@#及/符号
1、# (stringizing)字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。如:#define example(instr) printf("the input string is:/t%s/n",#instr)#define example1(instr) #instr当使原创 2009-09-10 15:13:00 · 1012 阅读 · 0 评论 -
C++空类默认函数
定义一个空的C++类,例如class Empty{}一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于class Empty{public:Empty(); // 缺省构造函数Empty( const Empty& ); // 拷贝构造函数~Empty(); // 析构函数Empty& operator=( cons转载 2009-09-14 09:53:00 · 1322 阅读 · 0 评论 -
指针和引用的区别
★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用被创建的同时必须被初始化,只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^转载 2009-09-14 10:47:00 · 650 阅读 · 0 评论 -
C++空类的默认成员函数总结
class Empty{ public: Empty(); // 缺省构造函数 Empty(const Empty&); // 拷贝构造函数 ~Empty(); // 析构函数转载 2009-09-14 11:16:00 · 641 阅读 · 0 评论 -
HDC,CDC,CWindowDC,CClientDC,CPaintDC基础
首先说一下什么是DC(设备描述表) 解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使用时释放掉。 在c++ 编程中常会见到HDC,CDC,CCl转载 2009-09-11 12:45:00 · 676 阅读 · 0 评论 -
兼容的DC
兼容的DC指不是具体的图形设备,而是虚拟的设备,例如我们可以建一个虚拟的DC来存放和画bitmap,兼容DC的类 可以理解成CDC的派生类,可以调用CDC的各种绘图函数。void CMDI_testView::OnDraw(CDC* pDC){ CMDI_testDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw cod原创 2009-09-11 13:26:00 · 587 阅读 · 0 评论 -
C++中栈区 堆区 常量区
原文出自:http://baike.baidu.com/view/536145.htmC++中栈区 堆区 常量区(由一道面试题目而学习)2009-04-28 21:01#includevoid main(){char a[]="abc";栈 char b[]="abc";栈 char* c="abc";abc在常量区,c在栈上。char* d="abc"; 编译器可能会将它与c所指向的"a转载 2009-09-12 18:01:00 · 531 阅读 · 0 评论 -
关于内存对齐的全面详细解释
一、内存对齐的原因1、平台原因(移植原因):内存对齐其实不是操作系统内存架构范畴的问题,而是CPU架构方面的问题。不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。x86和x64系统支持自动内存对齐,IA-64系统则不能访问未对齐的内存地址。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的转载 2009-09-16 15:21:00 · 884 阅读 · 0 评论 -
DC保存至BMP图像
BOOL SaveBmp(HBITMAP hBitmap, CString FileName) { HDC hDC; //当前分辨率下每象素所占字节数 int iBits; //位图中每象素所占字节数 WORD wBitCount; //定义调色板大小,位图中像素字节大小,位图文件大小,写入文件字节数原创 2009-09-16 15:25:00 · 3886 阅读 · 4 评论 -
大端,小端
int main(){ int x=1; /*the first method */ if(*(char *) &x==1) printf("little/n"); else printf("big/n"); /*the second method*/ x = (char)x; if(x == 1) printf("little转载 2009-09-16 14:25:00 · 588 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static转载 2009-09-16 21:44:00 · 714 阅读 · 2 评论 -
C++面试题
1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?virtual修饰符会被隐形继承的。private 也被集成,只事派生类没有访问权限而已virtual可加可不加子类的空间里有父类的所有变量(static除外)同一个函数只存在一个实体(inline除外)子类覆盖它的函数不加virtual ,也能实现多态。在子类的空间里,原创 2009-09-17 22:06:00 · 952 阅读 · 1 评论 -
深拷贝、浅拷贝构造函数
Trend科技的一道面试题:请看下面的程序,说说会出现什么问题?#include #include #include using namespace std; class CDemo { public: CDemo():str(NULL){}; ~CDemo() { if(str) delete[] str;转载 2009-09-28 14:34:00 · 1382 阅读 · 0 评论 -
static用法小结
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, reg转载 2009-09-16 22:25:00 · 525 阅读 · 0 评论 -
VS2005链接错误,代码C1047
fatal error C1047: The object or library file '*.obj' was created with an older compiler than other objects; rebuild old objects and libraries 编译器为VS2005中文版,安装 VS80sp1-KB926601-X86-CH.exe 一切OK!原创 2014-03-17 16:57:20 · 1446 阅读 · 0 评论