自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

net_assassin的专栏

知识改变命运,技术改变生活

  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++ Primer 中文版 学习笔记(十七)

第十八章 特殊工具与技术18.1. 优化内存分配new 基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用用户级的类类型对象分配能够更快一些。这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每个新对象。如vector分配原始内存时,必须在该内存中构造对象;对未构造的内存中的对象进行赋值而不是初始化,其行为是未定义的

2013-07-31 15:37:35 1250 2

原创 C++ Primer 中文版 学习笔记(十六)

第17章   用于大型程序的工具1        大规模应用程序往往具有下列特殊要求:更严格的正常运转时间以及更健壮的错误检测和错误处理。错误处理经常必须跨越独立开发的多个子系统进行。        ----异常处理,错误检测与处理分开能够用各种库(可能包含独立开发的库)构造程序。                   ----命名空间能够处理更复杂的应用概念。          

2013-07-31 15:02:51 1347

转载 C++异常处理

一、什么是异常处理        一句话:异常处理就是处理程序中的错误。二、为什么需要异常处理,以及异常处理的基本思想        C++之父Bjarne Stroustrup在《The C++ Programming Language》中讲到:一个库的作者可以检测出发生了运行时错误,但一般不知道怎样去处理它们(因为和用户具体的应用有关);另一方面,库的用户知道怎样处理这

2013-07-28 15:49:01 656

原创 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

原创 C++ Primer 中文版 学习笔记(十四)

第15章  面向对象编程1        面向对象编程基于三个基本概念:数据抽象、继承和动态绑定。2        继承层次共享共用的东西,仅仅特化本质上不同的东西。3        定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。4        在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指

2013-07-26 16:45:15 981

转载 裘宗燕: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

原创 C++ Primer 中文版 学习笔记(十三)

第14章  重载操作符与转换1        重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义2        操作符重载成成员函数还是普通非成员函数的一些指导原则:a)        = 、[]、 ()、->等操作符必须定义为成员,否则编译出错b)        复合复制操作符(+=)通常应定义为类的成员

2013-07-24 11:10:00 2535

原创 C++ Primer 中文版 学习笔记(十二)

第13章复制控制1        复制构造函数、赋值操作符和析构函数总称为复制控制。2        一种常见的情况需要类定义自己的复制控制成员是:类具有指针成员。(深拷贝、浅拷贝问题)3        三法则:如果类需要析构函数,则它也需要赋值操作符和复制构造函数。例外:如果基类为了将析构函数设为虚函数而具有空析构函数,那么,类具有析构函数并不表示也需要赋值操作符和复制构造函数。

2013-07-24 10:04:05 2589

原创 C++ Primer 中文版 学习笔记(十一)

第12章  类1        数据抽象是一种依赖于接口和实现分离的编程(和设计)技术。封装时一项将低层次的元素组合起来形成新的、高层次实体的技术。2        初始化const 或引用以及没有默认构造函数的类类型数据成员的唯一机会是在构造函数初始化列表中。3        隐式类型转换:可以用单个实参调用的构造函数定义了从形参类型到该类类型的一个隐式转换explicit 只对

2013-07-21 16:07:25 2786

转载 智能指针实现

namespace smart{ // 引用计数类. class smart_count { public: smart_count(int c = 0) : use_count(c) {} ~smart_count() {}  // 增加引用计数, 并返回计数值. int addref() { return ++use_count; } // 减少引用计数, 并返回计数值. int

2013-07-20 20:42:31 2516

原创 直接初始化与复制初始化

这是C++中所支持的两种初始化方式。 复制初始化使用=符号,而直接初始化将初始化式放在圆括号中。 (1)对于一般的内建类型,这两种初始化基本上没有区别。 int a(5);//直接初始化 int a=5;//复制初始化 int a=int (5);//直接初始化 (2)当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复

2013-07-19 11:21:06 2544

转载 为什么拷贝构造函数的形参必须是引用类型?

复制构造函数只有一个参数,由于在创建时传入的是同种类型的对象,所以一个很自然的想法是将该类型的对象作为参数,像这样: Sample (Sample a); 不幸的是,即使是这样朴实无华的声明也隐含了一个微妙的错误,呵,我们来看看:当某个时候需要以一个Sample对象的值来为一个新对象进行初始化时,编译器会在各个重载的构造函数版本(如果有多个的话)搜寻,它找到的这个版本,发现声明

2013-07-19 11:04:00 3094

转载 从一道题谈C++中构造函数调用构造函数

题目如下:问下列代码的打印结果为0吗?#include stdlib.h>#include iostream>using namespace std;struct CLS{    int m_i;    CLS( int i ) : m_i(i){}    CLS()    {        CLS(0);    }};int m

2013-07-19 11:02:57 758

转载 如何只在heap上创建对象,如何只在stack上建立对象?

google面试题:只能在堆上创建的对象,代码如下  class HeapOnly{public:    void destroy() const    {        delete this;    }private:    ~HeapOnly(){};};int main(){    //HeapOnly obj

2013-07-19 11:01:38 728

转载 explicit构造函数

按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”); 但是有

2013-07-19 11:00:13 584

转载 C++中友元详解

问题的提出  我们已知道类具备封装和信息隐 藏的特性。只有类的成员函数才能访问类的私有成员,程式中的其他函数是无法访问私有成员的。非成员函数能够访问类中的公有成员,但是假如将数据成员都定义 为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开 销,而影响程式的运行效率。  为了解决上述问题,提

2013-07-18 17:03:04 611

转载 隐式类类型转换

C++ primer 中有这么一句话:可以用单个实参来调用的构造函数定义了从形参类型到该类型的一个隐式转换。这么解释:比如有个类A的对象a的成员函数的参数应该是类A的对象,但是把一个别的类型B的对象b传进去了,而且这个对象b的类型恰好是A的单参数构造函数参数类型,这时系统就用这个b自作聪明的创建了一个类A的临时对象c,虽然c和a都是A类型,但是是不同的对象。这种隐式转换有很大风险,可以

2013-07-18 16:38:46 556

转载 C++编程实用技巧——专家讲述C++程序设计的窍门

从C转向C++对每个人来说,习惯C++需要一些时间,对于已经熟悉C的程序员来说,这个过程尤其令人苦恼。因为C是C++的子集,所有的C的技术都可以继续使用,但很多用起来又不太合适。例如,C++程序员会认为指针的指针看起来很古怪,他们会问:为什么不用指针的引用来代替呢?C是一种简单的语言。它真正提供的只有有宏、指针、结构、数组和函数。不管什么问题,C都靠宏、指针、结构、数组和函数来解决

2013-07-18 10:05:58 908

原创 C++编程实用技巧 #32:尽可能地推迟变量的定义

是的,我们同意C语言中变量要放在模块头部定义的规定;但在C++中,还是取消这种做法吧,它没必要,不自然,而且昂贵。还记得吗?如果定义了一个有构造函数和析构函数的类型的变量,当程序运行到变量定义之处时,必然面临构造的开销;当变量离开它的生命空间时,又要承担析构的开销。这意味着定义无用的变量必然伴随着不必要的开销,所以只要可能,就要避免这种情况发生。正如我所知道的,你的编程方式优雅

2013-07-18 10:03:01 1532

原创 c++ 类的前置声明

刚开始学习c++的人都会遇到这样的问题:定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样:一编译,就出现了一个互包含的问题了,这时就有人跳出来说,这个问题的解决办法可以这样,在a.h文件中声明类B,然后使用B的指针。然后,问题就解决了。但是,有人知道问题是为什么就被解决的吗,也就是说,

2013-07-18 09:46:14 2106 2

原创 C++ Primer 中文版 学习笔记(十)

第11章泛型算法1        泛型算法只在一点上隐式地依赖元素类型:必须能够对元素做比较运算。2        泛型算法的明确要求如下:1)  需要某种遍历集合的方式:能够从一个元素向前移到下一个元素。2)  必须能够知道是否到达了集合的末尾。3)  必须能够对容器中的每一个元素与被查找的元素进行比较。4)  需要一个类型来指出元素在容器中的位置,或者表示找不到该元素。

2013-07-18 09:06:22 759

转载 STL学习小结

STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最

2013-07-18 08:37:03 683

转载 C/C++堆、栈及静态数据区详解

五大内存分区在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自

2013-07-17 10:15:13 714

原创 析构函数 private 、virtual的作用

类中“私有”权限的含义就是:私有成员只能在类域内被访问,不能在类域外进行访问。       把析构函数定义为私有的,就阻止了用户在类域外对析构函数的使用。这表现在如下两个方面:       1.  禁止用户对此类型的变量进行定义,即禁止在栈内存空间内创建此类型的对象。要创建对象,只能用   new   在堆上进行。       2.  禁止用户在程序中使用   dele

2013-07-17 09:55:41 2967

转载 详细解说STL排序(Sort)

0 前言: STL,为什么你必须掌握对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算

2013-07-17 09:05:07 889

原创 C++ Primer 中文版 学习笔记(九)

第10章  关联容器1        关联容器和顺序容器的本质区别在于:关联容器支持键(key)的使用,并且通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。2        关联容器元素根据键的次序排列。3        对于键类型,唯一的约束就是必须支持4        Map类定义的类型:1)  key_type     索引的键的类型

2013-07-16 21:02:22 2315 2

原创 bitmap与桶方式对1000万数据进行排序

1.  100万数据的产生,随机数方式#include #include #include #include #include using namespace std;const int size = 10000000;int num[size];int main(){ int n; FILE *fp = fopen("data.txt", "w");

2013-07-16 11:08:30 2492 1

原创 C++ Primer 中文版 学习笔记(八)

第9章顺序容器1  接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。2  容器内元素类型的约束:1)  元素类型必须支持赋值运算。(支持赋值)2)  元素类型的对象必须可以复制。(可以复制)IO库类型不支持复制或赋值。因此,不能创建存放IO类型对象的容器。3  vector和deque容器的迭代器提供额外的运算。(算数运算以及除 == 和 != 的

2013-07-16 10:22:17 1351

转载 C++类对象成员变量与成员函数内存分配问题

C++类的内存地址存放问题了解C++类地址的存放和分配等问题,能帮助我们更深入、更清晰了解类的组成及其使用。自己目前不是很清楚,先收集一些网上资料,而后再慢慢补充增加的了解...//-------------------------------------------网络收集之-------------------------------------关于结构体和

2013-07-15 14:51:52 867

转载 C++类对象内存结构

C++类对象内存结构  首先介绍一下C++中有继承关系的类对象内存的布局: 在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少

2013-07-15 14:27:56 681

转载 网易游戏游戏开发工程师笔试试题

网易游戏游戏开发工程师笔试试题1.一次考试,有25人参加,有ABC三题,每人至少会做一题,在不会做A的人中,会做B的人是会做C的人的两倍,在会做A的人中,只会做A的人比其他的少一人,不会做A的人和只会做A的人数相等,问只会做B的有几人?解:设绿色加白色为X  紫色加白色为X/2   白色为Z   红色为Y   蓝色为Y+1所以由条件可得X+0.5X-Z+2Y+1=25     X+

2013-07-15 08:43:27 2440

转载 游戏开发工程师试题

c++程序问题:(thinking in c++ not c,可以使用stl)1 请写代码打印100之内的素数,讲求效率(请做你的解法的效率分析)2 求m,n的最大公约数3 输入10个字符串,打印出其中重复的字符串以及重复的次数4 请画图例(UML最好),给出windows下的文件目录的设计模式5 用OO表示狼吃羊羊吃草问答题:1 什么是subversion?它与vss,c

2013-07-15 08:41:04 1820

原创 c++阶乘问题

//任何一个数都可以用阶乘的形式来表示:N=a!+b!+….c!,要求a>=b>=..>=c,并且a,b,..,c尽可能大。//比如6表示成:6=3! 而不能表示成:6=2!+2!+2!或 6=2!+2!+1!+1!//这样就可以把一个数用阶乘式唯一表示,如:10=3!+2!+2! 90=5!+4!+3!//程序要求:输入一个数N(N<100000),输出N的阶乘式 #include #

2013-07-14 09:38:44 3021

原创 C++ Primer 中文版 学习笔记(七)

第8章标准IO库1    控制台­­­­­-----------读写控制窗口-----iostream   磁盘文件--------文件------------------fstream   字符串流--------格式化内存--------stringstream2  IO对象不可复制或赋值。因为IO对象的复制构造函数是私有的,不能被调用。   导致:   1) 

2013-07-12 16:24:09 1606

原创 C++ Primer 中文版 学习笔记(六)

第7章函数1  函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针。2  C++是静态强类型语言,对于每一次的函数调用,编译时都会检查其实参。3  每次函数调用时,都会重新创建该函数所有的形参,此时传递的实参将会初始化对应的形参。形参分为 非引用形参 和 引用形参。非引用形参的初始化为复制实参的值;引用形参则是实参的别名。4  非引

2013-07-11 20:02:57 1261

原创 C++ Primer 中文版 学习笔记(五)

第6章 语句1  在循环条件中定义的变量在每次循环里都要经历创建和撤销的过程。2  异常用于处理程序执行时预期发生的错误。   异常机制提供程序中错误检测和错误处理部分之间的通信。   C++的异常处理包括:1)      Throw表达式,throw引发了异常条件    错误检测2)      Try块                                错误处

2013-07-11 15:54:43 930

原创 C++ Primer 中文版 学习笔记(四)

第5章表达式1 不应该串接使用关系操作符。2 只有在必要时才使用后置操作符:  因为前置操作需要做的工作更少,只需加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。3 后自增操作的优先级高于解引用操作。  *iter++ 等效于 *(iter++)4 箭头操作符(->) 和点操作符(.)  (*p).foo;

2013-07-11 15:37:58 858

Begin game programming

本资源对应 net_assassin 的博客专栏中的源代码。 简单易懂 敬请阅读

2012-08-24

DirectX游戏编程入门——第二部分(游戏编程工具箱) ——渲染3D模型文件

这资源是与博文中讲解内容配套的源代码。3D模型渲染部分

2012-08-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除