
C++
jia_xiaoxin
不屈不挠、努力、坚持信念就能达成心愿!
展开
-
数据类型转换(static_cast, const_cast ,reinterpret_cast ,dynamic_cast )
static_cast const_cast reinterpret_cast dynamic_cast 1)staic_cast静态强制; 不能在无关的指针之间进行static类型强制 class CAnimal { //... public: CAnimal(){} }; class CGiraffe:public CAnimal { //... public: CGiraffe(){} };转载 2008-08-26 12:20:00 · 1295 阅读 · 1 评论 -
析构函数声明为私有的作用
当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。class alloc{public: alloc():private: ~alloc();}; 如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。如果在堆上分配空间,只有在delete时才会调用析构函数。 可以添加一个destroy()函原创 2008-11-21 23:09:00 · 11939 阅读 · 0 评论 -
构造函数初始化表的使用规则
(1)如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。class A{public: A(int x);};class B : public A{public: B(int x, int y);};//如果A没有默认构造函数,必须在初始化表里调用A的构造函数.B::B(int x, int y) :A(x) {}(2)类的const常原创 2008-11-19 20:21:00 · 1631 阅读 · 0 评论 -
用VC写DLL中"error LNK2005: _DllMain@12 already defined"的应对
用Visual C++编写DLL,如果在new project时选了MFC DLL,而后又想写成Regular DLL,即拥有自己的DllMain()入口函数,则在build时会遇到类似如下的link错误: error LNK2005: _DllMain@12 already defined in xxx.OBJ几种解决方案:1, 你只需要在工程设置里面,把WIN32,NDEBUG转载 2009-01-04 17:19:00 · 7622 阅读 · 3 评论 -
内联函数(inline)机制与陷阱
内容提要:1.内联相对于宏的优点2.为什么“inline”只是程序员对编译器的建议(而非强制命令)3.内联失败的陷阱在C、C++中函数调用需要少量开销。有时候这少量开销积少成多,对程序性能造成影响。有时候函数本身很简单,函数调用的开销比执行函数内容本身的开销还大。C程序员一定知道可以采用宏(Macro)机制来改善上述情况。但是宏基本上是在预编译阶段做文本替换,因此它有以下缺陷:转载 2008-11-08 14:35:00 · 5780 阅读 · 0 评论 -
程序自修改(SMC)
理论:所谓SMC(Self Modifying Code)技术,就是一种将可执行文件中的代码或数据进行加密,防止别人使用逆向工程工具对程序进行静态分析的方法,只有程序运行时才对代码和数据进行解 密,从而正常运行程序和访问数据。本篇通过一个简单的实例来介绍这个技术。需要的运行环境vc6,程序编译为release版。由于本篇我们要在程序执行过程中,修改代码段中的一个函数内容,而默认情况下,我们编译生成转载 2008-09-18 11:00:00 · 3521 阅读 · 1 评论 -
error LNK2019(无法解析的外部符号)
无法解析的外部符号“symbol”是指该符号在函数“function”中被引用,在function中找到了未定义的外部符号 (symbol)。若要解决此错误,请提供符号定义或移除引用它的代码。 1.在 Visual C++ .NET 2003 中,如果使用了 /clr 而未将 CRT 链接到可执行文件,将生成此错误。任何由编译器在未使用 /clr:initialAppDomain 时生成的转载 2008-09-12 19:59:00 · 4203 阅读 · 1 评论 -
动态分配内存的原理
FAQ 2.07 C++允许用new指针动态分配内存,动态分配也就是从堆分配。下面显示了用语法new Car()从堆分配Car对象。结果被存在一个CarPtr指针中,CarPtr是一个auto_ptr的别名,这是一种"安全指针类型"。typedef语法建立了相对应的别名。#include #include翻译 2008-09-08 13:56:00 · 2181 阅读 · 0 评论 -
用显式参数构造对象的基本原理
FAQ 2.06构造器是用来初始化对象的特殊成员函数,如果需要参数,参数可以在圆括号()里提供,如果当前的对象不需要参数,一定不要加圆括号。下面是一个例子:#include "Car.hpp"void f(){ Car a; Car b(100, 73);翻译 2008-09-08 11:30:00 · 658 阅读 · 0 评论 -
C++程序员需要注意的11个问题
下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的,是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如:指向成员的指针,这是许多资料中都不愿提到的地方,也是经常出错的地方,甚至是对一些高级的C++程序员也是如此。 这里的要点不仅仅是解释怎样写出更好的代码,更多的是展现出语言规则里面的东西。很显然,它们对C++程序员来说是永久的好资料。我相信这一篇文章会使你收获不转载 2008-09-02 17:58:00 · 1308 阅读 · 0 评论 -
字符串和流
字符串一、char_traits 字符特征类1)意义:包装特定串元素的通用行为界面,以便容器实现时依据特征信息而执行特定行为2)定义了通用类型名typedef _Elem char_type;typedef int int_type;typedef streampos pos_type;typedef streamoff off_type;typedef mbstate_t state_t转载 2008-09-02 10:32:00 · 2392 阅读 · 0 评论 -
facanf相关的一些问题
fscanf和scanf返回值:类型为 int 。值为对输入缓冲区成功执行操作的个数,此值可能小于输入项的个数,也可能在遇到错误时返回0. fprintf的返回值:值为写到输出缓冲区的字节数,如果失败则返回负数。 要说明的是fseek函数一般用于二进制文件。在文本文件中由 于要进行转换,故往往计算的位置会出现错误原创 2008-09-01 09:27:00 · 750 阅读 · 0 评论 -
COM的数据类型BSTR,Variant
COM的特性是语言中立、硬件结构中立,很明显,它需要一个语言中立、硬件结构中立的文本数据类型。 OLECHAR和BSTR就是干这个用的。 OLECHAR:在编译源代码的目标操作系统上COM使用的字符类型。 对于Win32操作系统,这是wchar_t字符类型。 对于Win16操作系统,这是char字符类型。 对于MacOS,这是char类型。 对于Solaris OS,这是wchar_t字符类型。转载 2008-08-27 19:49:00 · 3332 阅读 · 2 评论 -
_bstr_t 和CComBSTR
_bstr_t在VC中是为了兼容BSTR类型而增加的,也就是为了实现LPCSTR与BSTR转换。它需要头文件#include _bstr_t 是BSTR的包装类转换方法 LPSTR strDemo="Test"; _bstr_t bstr(strDemo); 建议加上try,catch,用于catch(_com_error &e) The foll原创 2008-08-27 20:51:00 · 2743 阅读 · 0 评论 -
《Windows用户态程序高效排错》读摘
VC在debug模式下,对CRT(C Runtime)分配的Heap内存,都会初始化填充成0xcdcdcdcd。目的就是为方便程序员debug.一旦看到oxcdcdcdcd,就表示访问了没有初始化的内存。用javascrip来开发事务逻辑,是犯了web开发的大忌,因为jiavascrip的行为对客户端浏览器的依赖特别大,重定向最好用http320来实现Response.redirect就是原创 2008-08-26 15:48:00 · 823 阅读 · 0 评论 -
C++中const的用法详解
你也许有常量的概念并会用关键字const声明一个变量为常量,但是你知道const除了声明常量外,还可以声明const指针和const成员函数。本文将讨论const对象是如何建立、const对象的用途以及他们的语法。 Const声明仅仅用一个关键字就可以声明三种截然不同的结构,所以const声明常常让人混淆。让我们仔细看看这些这三种不同的const结构。Const对象当你把某个对象定义为const类转载 2008-08-26 12:18:00 · 4542 阅读 · 2 评论 -
C++沉思录摘记
C中的字符常量其实是未命名的字符数组(由编译器在尾部插入空字符/0来标识串尾) char hello[] = "hello"; valid char hello[5]; hello = "hello"; invalid 初始化时,数组的长度必须大于等于字符常量的长度+1 char hello[5] = "hello";原创 2008-08-26 13:58:00 · 867 阅读 · 0 评论 -
VC++中#import的使用
#import 指令1. C++中使用 COM 簡單的方法是用 #import 導入 type library2. # import 指令將 COM 產生對應的 C++類別,可以用接近於VBScript和Visual Basic的語句操作 COM3. 使用 #import 命令就可以將該文件導入到我們的程式碼中。type library 的內容將被轉換為描述了 COM Interface转载 2009-02-28 12:22:00 · 5659 阅读 · 0 评论