学习
文章平均质量分 71
sunshinewave
这个作者很懒,什么都没留下…
展开
-
error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainFrame::* )(void)' to 'LRESUL
不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)开发平台由VC6.0升级至VS2005,需要将原有的项目迁移,可能碰到类似错误:error C2440: 'static_cast' : cannot convert from 'void (__thiscall原创 2012-09-10 15:43:48 · 4516 阅读 · 0 评论 -
智能指针auto_ptr
很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它。这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码。本文阐述了如何正确运用auto_ptr来让你的代码更加安全——以及如何避免对auto_ptr危险但常见的误用,这些误用会引发间断性发作、难以诊断的bug。1.为什么称它为“自动”指针?auto_pt原创 2012-10-10 00:16:18 · 1570 阅读 · 2 评论 -
string实现
#includeusing namespace std; class String{ friend ostream& operator<< (ostream&,String&);public: String(const char* str=NULL); //赋值构造兼默认构造函数(char) String(const String &o原创 2012-10-08 00:47:31 · 2739 阅读 · 0 评论 -
对volatile修饰符的理解和使用
1. 什么是volatile修饰符?volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。2. 一个简单的例子volatile 影响编译器编译的结果。volatile变量是随时可能发生变化的,与vol转载 2012-09-16 12:42:39 · 937 阅读 · 0 评论 -
C/C++函数调用的几种方式
我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,windows下栈的大小是2M(也有的说是1M),如果申请的空间超过栈的剩余空间时,将提示overflow。在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执原创 2012-09-15 00:14:47 · 6870 阅读 · 0 评论 -
mutable
mutable关键字 关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员 我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变, 对像的状态也会随之发生变化! 如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是 该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数原创 2012-10-08 00:10:25 · 835 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2012-10-07 01:05:42 · 493 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝,浅拷贝)
C++拷贝构造函数(深拷贝,浅拷贝)对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include using namespace std;class CExample {private: int a原创 2012-09-02 21:00:50 · 730 阅读 · 0 评论 -
面试题
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba#include using namespace std;void swapW(char &a,char &b){ char c; c=a; a=b; b=c;}void perm(char a[],in原创 2012-09-15 20:22:28 · 941 阅读 · 1 评论 -
常用算法经典代码(C++版)
转自http://blog.renren.com/share/601054749/14194486216?from=0101010202&ref=minifeed&sfet=102&fin=8&ff_id=601054749一、快速排序void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中 {int h=x,r=y转载 2012-10-04 22:38:16 · 1704 阅读 · 0 评论 -
0-1背包问题 动态规划
分析如下:题目有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][转载 2012-10-04 22:13:42 · 1341 阅读 · 0 评论 -
构造函数能不能是虚函数
最近有人问构造函数能不能是虚函数:当然不能解释一下: 1,从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。2,从使用角度转载 2012-09-05 22:32:22 · 660 阅读 · 0 评论 -
C++中的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:[cpp] view转载 2012-09-11 01:56:41 · 548 阅读 · 0 评论 -
sizeof和字节对齐
typedefstruct{ unsigned short ID; unsigned short DataSize; char data[506]; unsigned short VerifyCode;} _PKG;typedefstruct{ char BufHead[6]; char BufDevide1[1]; char BufDb原创 2012-09-08 23:35:31 · 1702 阅读 · 0 评论 -
游戏设计中常用的设计模式
使用设计模式来提高程序库的重复利用性是大型程序项目开发必须的。但是在“四人帮”的设计模式概述中提到了23种标准设计模式,不但难以记住,而且有些设计模式更多的适用于应用程序开发,对游戏项目引擎设计并没有很多的利用价值。根据经验,精挑细选后,笃志在这里记录一些自认为有利用价值的设计模式,以便之后自己设计时使用。 一:观察者Observer 观察者的设计意图和作用是: 它将对象与对象之间创建转载 2012-09-27 00:48:11 · 1118 阅读 · 0 评论 -
构造函数定义为private,protected的好处
将构造函数,析构函数声明为私有和保护的,那么对象如何创建?已经不能从外部调用构造函数了,但是对象必须被构造,应该如何解决,麻烦大家帮忙说明,关于构造,析构函数声明为私有和保护时的用法??? 提出这个问题,说明你已经对c++有所思考了。从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数原创 2012-10-09 17:00:59 · 1513 阅读 · 0 评论 -
单例模式
看单例模式的例子:C/C++ code#include iostream>class Singleton{private: Singleton(int i=0):val(i){ //构造函数私有 std::cout"constructor,member val = "valstd::endl; } int val; stat原创 2012-10-09 20:43:47 · 808 阅读 · 0 评论 -
VC++中CMAP用法
【转】VC++中CMAP用法参考一:映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”,就像一种只有两列的表格,一列是关键字,一列是数据项,它们是一一对应的。关键字是唯一的,给出一个关键字,映射表类会很快找到对应的数据项。映射表的查找是以哈希表的方式进行的,因此在映射表中查找数值项的速度很快。映射类最适用于需要根据关键字进行快速检索的场合,我们的程序中就用映转载 2013-05-18 19:51:41 · 3782 阅读 · 0 评论 -
Com学习
最近在学习COM,自己实现了一个小Demo,拿出来和大家分享一下。求各种批评。我实现的这个组件向外提供了一个接口ICompTest,里面只有一个函数helloworld(),功能为返回一个整数89。实现了自注册功能。下面贴出代码,希望对刚开始学习COM的朋友有所帮助。 首先看一下工程结构,编译环境为vs 2010CompTest工程是服务端工程,是一个dll,CtrlTes原创 2012-12-17 03:45:18 · 1374 阅读 · 0 评论 -
朋友转发
如果你编程不规范,可以学习《高质量的C++编程》如果对MFC不甚了解,可以先学习《win32 API编程指南》,然后再《深入浅出MFC》如果对多线程不了解,可以学习《windows核心编程》关于线程与内核对象同步的知识如果对面向对象思想不了解,可以学习《设计模式》,其中第一章最精华;再进一步可以学习《敏捷开发原则》如果以上都已通晓。编程思想上可以看看《泛型编程与ST原创 2012-12-22 19:42:00 · 597 阅读 · 0 评论 -
如何给磁盘文件排序
http://blog.csdn.net/v_JULY_v/article/details/6451990第一节、如何给磁盘文件排序问题描述:输入:一个最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数)的文件,其中每个数都小于等于n,且n=10^7。输出:得到按从小到大升序排列的包含所有输入的整数的列表。条件:最多有大约1MB的内存空间可用,但磁盘空间足转载 2012-12-01 01:47:57 · 6847 阅读 · 0 评论 -
c++继承中的内存布局
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ O转载 2012-10-30 01:32:42 · 983 阅读 · 0 评论 -
关联容器的基本操作简单总结
C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。set&multiset一,原创 2012-10-13 21:25:01 · 1985 阅读 · 0 评论 -
c++学习6之顺序容器
容器类共享公共的接口,这使标准库更容易学习,只要学会其中一种类型就能运用令一种类型,每种容器类型提供一种不同的时间和功能折中方案,通常不需要修改代码,只需改变类型声明,用一种容器类型代替另一容器类型就可以优化程序的性能。 容器容纳特定类型对象的集合,它将单一类型元素聚集起来成为容器。然后根据位置来存储和访问这些元素,这就是顺序容器。 标准库定义 了三种顺序容器类型vector,li原创 2012-07-11 18:58:25 · 521 阅读 · 0 评论 -
c++学习7之关联容器
关联容器的类型:map:关联数组;元素通过键来从存储读取set:大小可变的集合,至此后通过建实现快速读取multimap:支持同一个键多次出现的map类型multiset:支持同一个键多次出现的set类型一般来说,如果希望有效地存储不同值的集合,那么使用set比较合适,而map容器则更适用于需要存储乃至修改每个键所干练的值的情况。在做某种文本处理时,可使用set保存要忽略的原创 2012-07-12 14:37:37 · 536 阅读 · 0 评论 -
set和multiset容器
1 set和multiset容器的能力set 和multiset容器的内部结构通常由平衡二叉树(balancedbinary tree)来实现。当元素放入容器中时,会按照一定的排序法则自动排序,默认是按照less2 set和multiset容器的操作Constructor and Destructor set c:创建一个空的set或multiset容器 se原创 2012-10-13 20:16:07 · 3971 阅读 · 1 评论 -
map的详细用法
map的详细用法: map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数原创 2012-10-13 17:27:44 · 122010 阅读 · 19 评论 -
hash表
转自 http://blog.csdn.net/feixiaoxing/article/details/6885657 hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分转载 2012-10-12 01:09:22 · 1286 阅读 · 0 评论 -
assert()函数用法总结
assert()函数用法总结 assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终原创 2012-09-21 00:40:52 · 769 阅读 · 0 评论 -
C++笔记5之文件操作
函数重载:Record(int &);Record(const int &);//新函数指向函数的指针:Bool (*pf)(const string &,const string&)这个语句将pf声明为指向函数的指针,它所指向的函数带两个const string&类型的形参和bool类型返回值。而*pf两侧的圆括弧是必须的;Bool *pf (const string原创 2012-07-11 13:29:31 · 630 阅读 · 0 评论 -
memmove 和 memcopy
1,memmove 函数原型:void *memmove(void *dest, const void *source, size_t count)返回值说明:返回指向dest的void *指针参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有原创 2012-10-10 00:41:21 · 958 阅读 · 0 评论 -
vtable
虚表。 每一个有虚函数的类都有这样一个东西。 它实际上记录了本类中所有虚函数的函数指针,也就是说是个函数指针数组的起始位置。 比如virtual void TheSecondFun()记录在数组的第二个元素,当一个该类的对象实例调用TheSecondFun时就根据对应关系把第二个函数指针取出来,再去执行该函数,这种行为叫晚绑定,也就是说在运行时才知道调用的函数是转载 2012-09-05 22:33:49 · 1302 阅读 · 0 评论 -
C++中虚函数的实现背后
摘要: 虚函数是很多编程语言中一个特性,比如c#,java,当然在c++语言中也有。这三种语言都是面向对象的语言。我们都知道面向对象语言有三个最基本的特征就是:继承,多态,封装。在c++语言中,这种多态的特征就是通过虚函 ...虚函数是很多编程语言中一个特性,比如c#,java,当然在c++语言中也有。这三种语言都是面向对象的语言。我们都知道面向对象语言有三个最基本原创 2012-09-05 22:11:50 · 1433 阅读 · 1 评论 -
析构函数可以是纯虚函数
在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。 class awov { public: virt转载 2012-09-05 21:11:21 · 2987 阅读 · 0 评论 -
c++笔记13
通常,非static数据成员存在于类类型的每个对象中,不像普通数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象向关联。static成员函数没有this形参,它可以直接访问所属类的static成员,但并不能直接使用费static成员。使用static成员的优点:(1)static成员的名字是在类的作用域中,因此可以避免与原创 2012-07-15 07:55:35 · 1228 阅读 · 7 评论 -
c++学习11
// 定义一个vector容器,存储在未来6个月里要阅读的书的名字,// 定义一个set,用于记录已经看过的书名。// 本程序支持从vector中选择一本没有读过而现在要读的书,// 并将该书名放入记录已读书目的set中,// 并且支持从已读书目的set中删除该书的记录。// 在虚拟的6个月后,输出已读书目和还没有读的书目#include #include #inc原创 2012-07-14 12:39:09 · 716 阅读 · 0 评论 -
c++笔记17之句柄类
句柄类存储和管理基类指针。指针所指的对象的类型可以变化,即可以指向基类对戏那个又可以指向派生类类型对象。用户通过句柄类访问继承层次的操纵。因为句柄类使用指针执行操作,虚成员的行为将在运行时根据句柄实际绑定的对象的类型而变化。因此,句柄的用户可以获得动态行为但无需操心指针的管理。包装了继承层次的句柄有两个重要的设计考虑因素1,像对任何保存指针的类一样。必须确定对复制控制做些什么。包装了继承层原创 2012-07-17 12:19:34 · 1469 阅读 · 2 评论 -
C++笔记16之const的用法总结
const主要是为了程序的健壮型,减少程序出错.最基本的用法:const int a=100; b的内容不变,b只能是100也就是声明一个int类型的常量(#define b =100)int const b=100; //和上面作用一样 const指针和引用一般用在函数的参数中int* m = &a; //出错,常量只能用常指针int c= 1;const int*pc = &c原创 2012-07-16 19:11:09 · 1853 阅读 · 0 评论 -
C++笔记15之函数对象
标准库定义的函数对象标准库定义了一组算术,关系与逻辑函数对象类,标准库还定义了一组函数适配器,使我们能够特化或者扩展标准库所定义的以及自定义的函数对象类,这些标准库函数对象类型是在functional头文件中定义的。算术函数对象类型:Plus +Minus -Multiplies *Divides /Modulus %Neg原创 2012-07-16 12:15:39 · 1017 阅读 · 0 评论 -
C++笔记14
为类设计操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数,在某些情况下,程序员没有选择,操作符必须是成员,在另一些情况下,有些经验原则可知道我们做出决定,下面是一些指导原则。有助于决定将操作符设置为类成员还是普通非成员函数。(1)赋值(=)下标[]调用()和成员访问->等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。(2)像赋值一样,复合赋值操作符通原创 2012-07-15 19:12:27 · 562 阅读 · 0 评论