C/C++ MFC
net_assassin
这个作者很懒,什么都没留下…
展开
-
短小精悍的线性筛法求素数
输入n,求n以内的所有素数算法用两个数组存储数据:一个是prime[],存储n以内所有的素数,其index为pi,初值为0一个是is_prime[i],表示自然数i(i原创 2014-11-20 14:18:26 · 4656 阅读 · 2 评论 -
C++的名称查找顺序
1。符号查找(对于函数此时只看名字,不看参数) 大致顺序是 (1)如果有限定名( XXX:: )那么就直接在XXX里查找 (2)函数局部名字空间 (3)(如果是成员)类名字空间 (4)递归向上至所有基类的名字空间 (5)当前名字空间 (6)递归向外至所有外层名字空间, 在任一层里, 用using导入的符号和该层的其他符转载 2013-08-06 21:34:31 · 966 阅读 · 0 评论 -
设计模式——装饰者模式(Decorator)
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。类继承可能会带来类数量爆炸等问题,设计死板。巴克莱咖啡,分店几乎开遍世界各地。他们发展的实在是太快了,所以他们此时正在急于实现一套由计算机管理的自动化记账系统。在第一次研究了他们的需求以后,开发者设计了如下图的类结构:原创 2013-08-05 21:49:39 · 849 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(十二)
第13章复制控制1 复制构造函数、赋值操作符和析构函数总称为复制控制。2 一种常见的情况需要类定义自己的复制控制成员是:类具有指针成员。(深拷贝、浅拷贝问题)3 三法则:如果类需要析构函数,则它也需要赋值操作符和复制构造函数。例外:如果基类为了将析构函数设为虚函数而具有空析构函数,那么,类具有析构函数并不表示也需要赋值操作符和复制构造函数。原创 2013-07-24 10:04:05 · 2589 阅读 · 0 评论 -
C++拾遗
因为C++实在是过于复杂了,时不时都会碰见一些晦涩的细节,因此特意发个帖子,留好位置,随时添加Item 1 前置声明 当不需要class A的完整定义而只需要其名称时,可以通过前置声明函数来避免包含class A对应的头文件,这样可以减少编译依赖关系 然而,需要注意的是,string和iostream不是类型名,而是typedef;由于标准不允许向st转载 2013-08-04 19:50:45 · 747 阅读 · 0 评论 -
non-local static对象初始化
C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static 对象,而其它static对象称为non-local static对象。 这两原创 2013-08-04 16:08:34 · 1033 阅读 · 0 评论 -
设计模式——工厂模式
工厂模式工厂模式就是将对象实例化的过程封装起来,成批次的构造对象。应用情景小故事: 假设有个刚起步的加工儿童男装小手工作坊,此时生产还比较单一,只能加工一款式A。大多客户都是散户,订单也很少,随来订单随做。那此时的模式结构如下图:#include using namespace std;class ClothBoy { public: v原创 2013-08-04 10:56:11 · 785 阅读 · 0 评论 -
C++异常处理
一、什么是异常处理 一句话:异常处理就是处理程序中的错误。二、为什么需要异常处理,以及异常处理的基本思想 C++之父Bjarne Stroustrup在《The C++ Programming Language》中讲到:一个库的作者可以检测出发生了运行时错误,但一般不知道怎样去处理它们(因为和用户具体的应用有关);另一方面,库的用户知道怎样处理这转载 2013-07-28 15:49:01 · 657 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(十五)
第16章 模板与泛型编程1 2 函数模板 templateint compare(const T &v1,const T &v2){ } //模板形参不能为空3 类模板 template class Queue{ public: Queue(); pr原创 2013-07-26 20:02:54 · 925 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(十四)
第15章 面向对象编程1 面向对象编程基于三个基本概念:数据抽象、继承和动态绑定。2 继承层次共享共用的东西,仅仅特化本质上不同的东西。3 定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。4 在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指原创 2013-07-26 16:45:15 · 981 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(四)
第5章表达式1 不应该串接使用关系操作符。2 只有在必要时才使用后置操作符: 因为前置操作需要做的工作更少,只需加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。3 后自增操作的优先级高于解引用操作。 *iter++ 等效于 *(iter++)4 箭头操作符(->) 和点操作符(.) (*p).foo;原创 2013-07-11 15:37:58 · 858 阅读 · 0 评论 -
C++类对应的内存结构
提示1:对“内存结构”表示有疑问或不解的,先参考:http://blog.csdn.net/guogangj/archive/2007/05/25/1625199.aspx,本文使用的表示方法和VC6的Memory视图一致,即:左上表示低位。 提示2:下文提到的“类大小”严格上来说是该类经过实例化的对象的大小。当然了,光研究长度的话,两者差别不大,因为:CClass转载 2013-08-01 17:16:52 · 654 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(二)
第三章 标准库类型1、当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。2、vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。3、vector对象动态增长虽然可以对给定元素个数的vector对象预先分配内存,但更有效的方法是先初始化一个空vector对象,然后再动态地增加元素。4、必须是已存在的原创 2012-03-31 16:01:24 · 1086 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(六)
第7章函数1 函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针。2 C++是静态强类型语言,对于每一次的函数调用,编译时都会检查其实参。3 每次函数调用时,都会重新创建该函数所有的形参,此时传递的实参将会初始化对应的形参。形参分为 非引用形参 和 引用形参。非引用形参的初始化为复制实参的值;引用形参则是实参的别名。4 非引原创 2013-07-11 20:02:57 · 1261 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(十七)
第十八章 特殊工具与技术18.1. 优化内存分配new 基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用用户级的类类型对象分配能够更快一些。这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每个新对象。如vector分配原始内存时,必须在该内存中构造对象;对未构造的内存中的对象进行赋值而不是初始化,其行为是未定义的原创 2013-07-31 15:37:35 · 1254 阅读 · 2 评论 -
public、protected、private继承
C++类继承关系问题 在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,代表了接口继承含义,而他们分别具体代表了什么含义呢?1. public 从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,子类 可以代替父类完成父类接口所声明的行为,也就是原创 2013-08-08 15:24:17 · 843 阅读 · 0 评论 -
Effective C++读书笔记(四) 设计与声明
4 设计与声明• 软件设计,是“令软件做出你希望它做的事情”的步骤和做法,通常以颇为一般性的构想开始,最终演变成十足的细节,以允许特殊接口(interface)的开发,这些接口而后必须转换为C++声明式。条款18:让接口容易被正确使用,不易被误用 Makeinterfaces easy to use correctly and hard to use原创 2013-08-09 19:32:33 · 763 阅读 · 0 评论 -
C++ 模板类型萃取技术 traits
自从C++中引入了template后,以泛型技术为中心的设计得到了长足的进步。STL就是这个阶段杰出的产物。STL的目标就是要把数据和算法分开,分别对其进行设计,之后通过一种名为iterator的东西,把这二者再粘接到一起。设计模式中,关于iterator的描述为:一种能够顺序访问容器中每个元素的方法,使用该方法不能暴露容器内部的表达方式。可以说,类型萃取技术就是为了要解决和iterator有关的转载 2013-08-09 16:20:15 · 3599 阅读 · 2 评论 -
N皇后问题
#include#include#includeusing namespace std;int search(int);int print();int n,sum = 0;int f[1001],b[1001] = {0},c[2002] = {0},d[2002] = {0};int main(){ cin>>n; search(1); s原创 2014-07-20 10:28:51 · 4200 阅读 · 0 评论 -
Effective C++读书笔记(三) 资源管理
3 资源管理所谓资源就是,一旦用了它,将来必须还给系统。C++程序中最常使用的资源就是动态分配内存(如果你分配内存却从来不曾归还它,会导致内存泄露),但内存只是你必须管理的众多资源之一。 条款13:以对象管理资源 Use object to manage resources.• 把资源放进对象内,我们便可依赖C++的“析构函数自动调用机制”确保资源被原创 2013-08-08 19:51:47 · 897 阅读 · 0 评论 -
Effective C++ 读书笔记(七) 模板与泛型编程
7 模板与泛型编程面向对象virtual 运行时多态 显示接口 重载、template和泛型 编译期多态 隐式接口• 条款41:了解隐式接口和编译期多态 Understand implicit interfaces and compile-time polymorphism.–原创 2013-08-30 15:14:07 · 4057 阅读 · 0 评论 -
Effective C++读书笔记(二)构造、析构、赋值
•条款05:了解C++默默编写并调用哪些函数•Know whatfunctions C++ silently writes and calls–C++会为默认的空类(emptyclass)添加•Default 默认构造函数•Copy 构造函数•析构函数•Copy assignment 复制赋值操作符–唯有这些函数被调用时,它们才会被编译器创建出来。–•条款06:原创 2013-08-06 11:22:01 · 809 阅读 · 0 评论 -
Effective C++ 读书笔记(六) 继承与面向对象设计
条款32:确定你的pubilc继承塑模出is-a关系 Make sure public inheritance models “is-a”– C++进行(OOP)面向对象编程,最重要的一个规则是:public inheritance (公开继承)意味“is - a”(是一种)关系。– 如果你令class D(“de原创 2013-08-30 13:48:54 · 3991 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(三)
第四章 数组和指针1、不允许数组直接复制和赋值。2、指针和引用的比较虽然使用引用和指针都可间接访问另一个值,但它们之间有两个重要区别。第一个区别在于引用总是指向某个对象:定义引用时没有初始化式错误的。第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联3、C++允许计算数组或对象的超出末端的地址,但不允许对此地址进行原创 2012-03-31 16:47:12 · 1388 阅读 · 1 评论 -
C++ Primer 中文版 学习笔记(一)
第一部分 基本语言第二章 变量和基本类型1、理解C++中“初始化不是赋值”是必要的。初始化指创建变量并给它赋初始值,而赋值则是擦除对象的当前值并用新值代替。2、一个类可以定义几个构造函数,每个构造函数必须接受不同数目或者不同类型的参数。3、除了用作赋值操作符的左操作数,未初始化变量用作任何其他用途都是没有定义的。4、可以通过使用extern关键字声明变量名而不定义它。原创 2012-03-31 15:35:09 · 1591 阅读 · 1 评论 -
Const 重载解析(const参数重载 和 const成员函数重载)
书上和网上在很多地方都对const 的重载做了一些解释,但感觉都不是很详细。还有很多同学在不同的地方发问关于const 重载的问题,这里我又重新看了一下,做了一个简单的分析也可能有不对的地方,欢迎讨论。所谓重载,是指允许存在多个同名函数,而这些函数的参数表不同,即函数名相同但函数的签名不同。重载并不是面向对象编程的特有属性,这是因为重载是在编译阶段实现的,编译器根据函数不同的参数表,对同名函数转载 2013-08-16 10:26:54 · 6340 阅读 · 2 评论 -
Effective C++读书笔记
Effective C++ 改善程序与设计的55个具体做法让自己习惯C++条款01:视C++为一个语言联邦条款02:尽量以const,enum,inline替换#define条款03:尽可能使用const条款04:确定对象被使用前已被初始化构造、析构、赋值条款05:了解C++默认编写并调用哪些函数条款06:若不想使用编译器自动生成的函数,就该明确拒绝条款07:为原创 2013-08-08 20:17:21 · 751 阅读 · 0 评论 -
设计模式 连连看
原创 2013-08-13 16:58:44 · 693 阅读 · 0 评论 -
Proxy 模式
作用:为其他对象提供一种代理以控制对这个对象的访问#include using namespace std; class Subject{public: Subject(){} virtual ~Subject(){} virtual void request() = 0;private:};class RealSubject:public Su原创 2013-08-13 16:07:28 · 792 阅读 · 0 评论 -
Effective C++ 读书笔记(五) 实现
5 实现 大多数情况下,适当提出拟的类定义以及函数声明,是花费最多心力的两件事。尽管如此,还是有很多东西需要小心:太快定义变量可能造成效率上的拖延;过度使用转型(casts)可能导致代码变慢又难维护,又招来微妙难解的错误;返回对象“内部数据之号码牌(handls)”可能会破坏封装并留给客户虚吊号码牌;为考虑异常带来的冲击则可能导致资源泄漏和数据败坏;过度热心地inlining原创 2013-08-13 15:02:53 · 860 阅读 · 0 评论 -
Template Method 模式
Method模式作用:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。UML结构图:现在看具体例子 泡茶喝泡咖啡原创 2013-08-12 19:59:32 · 733 阅读 · 0 评论 -
Singleton模式
单线程singleton模式#include using namespace std; template class Singleton { public: static T* getInstance() { if( !instance ) { instance = new T(); } retu原创 2013-08-11 21:33:21 · 644 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(十六)
第17章 用于大型程序的工具1 大规模应用程序往往具有下列特殊要求:更严格的正常运转时间以及更健壮的错误检测和错误处理。错误处理经常必须跨越独立开发的多个子系统进行。 ----异常处理,错误检测与处理分开能够用各种库(可能包含独立开发的库)构造程序。 ----命名空间能够处理更复杂的应用概念。原创 2013-07-31 15:02:51 · 1347 阅读 · 0 评论 -
裘宗燕:C/C++ 语言中的表达式求值
经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++ 不是规定 要弄清这些,需要理解的一个问题是:如果程序里某处修改了一个变量(通过赋值、增量/减量操作等),什么时候从该变量能够取到新值?转载 2013-07-25 08:20:56 · 966 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(十三)
第14章 重载操作符与转换1 重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义2 操作符重载成成员函数还是普通非成员函数的一些指导原则:a) = 、[]、 ()、->等操作符必须定义为成员,否则编译出错b) 复合复制操作符(+=)通常应定义为类的成员原创 2013-07-24 11:10:00 · 2535 阅读 · 0 评论 -
详细解说STL排序(Sort)
0 前言: STL,为什么你必须掌握对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算转载 2013-07-17 09:05:07 · 889 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(八)
第9章顺序容器1 接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。2 容器内元素类型的约束:1) 元素类型必须支持赋值运算。(支持赋值)2) 元素类型的对象必须可以复制。(可以复制)IO库类型不支持复制或赋值。因此,不能创建存放IO类型对象的容器。3 vector和deque容器的迭代器提供额外的运算。(算数运算以及除 == 和 != 的原创 2013-07-16 10:22:17 · 1351 阅读 · 0 评论 -
C++类对象成员变量与成员函数内存分配问题
C++类的内存地址存放问题了解C++类地址的存放和分配等问题,能帮助我们更深入、更清晰了解类的组成及其使用。自己目前不是很清楚,先收集一些网上资料,而后再慢慢补充增加的了解...//-------------------------------------------网络收集之-------------------------------------关于结构体和转载 2013-07-15 14:51:52 · 867 阅读 · 0 评论 -
C++类对象内存结构
C++类对象内存结构 首先介绍一下C++中有继承关系的类对象内存的布局: 在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少转载 2013-07-15 14:27:56 · 681 阅读 · 0 评论 -
C++ Primer 中文版 学习笔记(七)
第8章标准IO库1 控制台-----------读写控制窗口-----iostream 磁盘文件--------文件------------------fstream 字符串流--------格式化内存--------stringstream2 IO对象不可复制或赋值。因为IO对象的复制构造函数是私有的,不能被调用。 导致: 1)原创 2013-07-12 16:24:09 · 1606 阅读 · 0 评论