C++ Programming
文章平均质量分 77
SuperXu_swjtu
这个作者很懒,什么都没留下…
展开
-
Inside the C++ Object Model学习笔记[Chap2.2]
2.2 Copy Constructor建构操作2.2.1 调用Copy Constructor的三种情况1. 用一个类对象的内容对另一个对象作明确的初始化操作,如①;2. 当对象被当作参数传给某个函数时,如②;3. 当函数传回一个类对象时,如③;class X { …… };void func( X x ) { …… }X func() {原创 2006-09-04 22:14:00 · 943 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap5]
第5章 构造、析构与拷贝语意学5.0 引言可以定义和调用一个纯虚函数,但是只能被静态地调用,不能经由虚拟机制调用,如:class AbstractBase { public: virtual void interface() const = 0;};inline void AbstractBase::interface() co原创 2006-10-21 10:35:00 · 1370 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap6]
第6章 执行期语意学6.0 引言对如下的类定义以及操作:class Y { public: Y(); ~Y(); bool operator==( const Y& ) const;};class X { public: X原创 2006-10-21 10:37:00 · 952 阅读 · 0 评论 -
C++动态内存创建与内存管理学习笔记[1]
1 内存空间逻辑组织A 静态数据区:内存在程序启动的时候才被分配,而且可能直到程序开始执行的时候才被初始化,如函数中的静态变量就是在程序第一次执行到定义该变量的代码时才被初始化。所分配的内存在程序的整个运行期间都存在,如全局变量,static变量等。注意:初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过void*来访问原创 2006-10-21 10:14:00 · 991 阅读 · 0 评论 -
The Most Important C++ People
The C++ SourceA Pause to Reflect: Five Lists of Five, Part IVThe Most Important C++ People...EverOpinionby Scott MeyersAugust 30, 2006In my first three articles in this series, I named my picks for转载 2006-11-06 10:37:00 · 1448 阅读 · 0 评论 -
The Most Important C++ Non-Book Publications
The C++ SourceA Pause to Reflect: Five Lists of Five, Part IIThe Most Important C++ Non-Book Publications...EverOpinionby Scott MeyersAugust 16, 2006Last week, in the first article in this series, I转载 2006-11-06 10:59:00 · 1587 阅读 · 0 评论 -
The Most Important C++ Books
The C++ SourceA Pause to Reflect: Five Lists of Five, Part IThe Most Important C++ Books...EverOpinionby Scott MeyersAugust 9, 2006I wrote Effective C++ in 1991. I learned C++ some years before that转载 2006-11-06 11:00:00 · 1487 阅读 · 0 评论 -
The Most Important C++ Software
The C++ SourceA Pause to Reflect: Five Lists of Five, Part IIIThe Most Important C++ Software...EverOpinionby Scott MeyersAugust 23, 2006In my first two articles in this series, I named my picks for转载 2006-11-06 10:54:00 · 1408 阅读 · 0 评论 -
函数返回引用的含义
The function call expression is an lvalue to the referent.When a function returns a reference, the function call becomes an lvalue for the referent. This is normally used to allow operator expressio转载 2006-11-06 15:22:00 · 1039 阅读 · 0 评论 -
Scott Meyers's Most Important C++ Aha! Moments
The C++ SourceA Pause to Reflect: Five Lists of Five, Part VMy Most Important C++ Aha! Moments...EverOpinionby Scott MeyersSeptember 6, 2006In the first four articles in this series, I named my pick转载 2006-11-06 10:56:00 · 1303 阅读 · 0 评论 -
顺序栈的实现例程
说明:一直对栈似是而非的理解,因此写出其实现,但是就这个简单的程序中,我发现存在着很多缺陷,谁有兴趣帮我更正,本人非常感谢。另外我发现仅就顺序栈而言,都存在着多个变种:)////////-----------Stack_Seq_SelfDefine.h-----------///////#include using namespace std;//-------------------原创 2006-11-13 14:00:00 · 999 阅读 · 0 评论 -
单链表的顺序实现例程[静态分配存储空间]
说明:单链表的顺序实现,采用静态存储分配方式。///////////-----------SingleList_Sequence.h------------////////////////-----------------------------------------//// Single List of Sequence with Static Memory Allocation//原创 2006-11-13 14:15:00 · 1223 阅读 · 0 评论 -
单链表的顺序实现例程[动态分配存储空间]
//-----------------------------------------//// Single List of Sequence with Dynamic Memory Allocation// by SuperXu 2006.11// Version: Final//-----------------------------------------//#include usin原创 2006-11-14 13:42:00 · 1259 阅读 · 0 评论 -
单链表的链式实现例程
说明:单链表的定义我一直都没有弄明白,没有找到一种很好的定义方式,本文采用链表节点与链表分开定义的方式,采用友元来访问,还是比较明了,思路也并不繁琐。如果有人能够给我如何定义链表的更好建议,本人非常感谢!本文虽然看起来较长,但是并不杂乱。 本实现例程的几个不足之处: 1、不能确定几个构造函数,拷贝构造函数是否正确,更不确定是否合适; 2、由于节点类中原创 2006-11-15 14:21:00 · 999 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap4.0-4.2]
第4章 函数语意学4.0 引言对Point3D的指针和对象:Point3D opd;Point3D *ppd;调用其成员函数时:opd.normalize();ppd->normalize();将有什么动作发生及其区别?显然根据成员函数的三种不同方式:static,nonstatic与virtual,每一种类型被调用的方式各不相同。如下几节将详细描述原创 2006-10-21 10:29:00 · 1080 阅读 · 0 评论 -
C++动态内存创建与内存管理学习笔记[4]
4 内存分配与管理4.1 内存管理策略A 通用意图的分配策略――提供调用方可能要求的任意大小的内存块,非常灵活但造成内存碎片以及性能较低;B 固定大小的分配策略――返回固定大小的内存块,性能高碎片少但是灵活性差;C 垃圾收集分配策略。4.2 内存管理层次A 操作系统内核提供了最为基础的内存分配服务;B 编译器的默认运行库也建立有它自己的内存分配服务,如operator原创 2006-10-21 10:22:00 · 1086 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap2.4]
2.4 成员初始化列表对于类成员的初始化,可以采用成员初始化列表或者在构造函数体内两种方式,而且差异不大,但在如下四种情况下,必须使用成员初始化列表(因为效率的原因):1. 初始化一个引用成员时;2. 初始化一个const成员时;3. 调用一个基类的构造函数,但它拥有一组参数时;4. 调用一个成员类的构造函数,但它拥有一组参数时。使用成员初始化列表的注意事项:1. 初始原创 2006-09-04 22:18:00 · 930 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap1.3]
1.3 对象的差异1.3.1 C++支持三种程序设计范型 1. 过程型(procedural model):C语言作为典型,按照任务流程一一处理; 2. 抽象数据类型模型(ADT/Object-Based):通过一组公共接口操作,但其运算定义并不对外公开,程序员处理的是一个拥有固定而单一类型的实体; 3. 面向对象模型(OO):模型中存在一些彼此相关的类型,通过一个抽象的基原创 2006-09-04 22:08:00 · 887 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap3.1-3.3]
3.1 数据成员的绑定1. 全局数据与类内部数据成员的关系:类内部对于内联成员函数的数据成员绑定操作会在整个类声明完成之后才发生,即屏蔽了全局数据;2. 类成员函数的参数表问题:参数表中的名称在其第一次出现时被适当地决议完成,这样可能会造成外部名称与嵌套类型名称相冲突,如下例中的length在两个成员函数中都被决议为全局类型int,当后续包涵length的嵌套类型声明出现时,就将稍早的绑定原创 2006-09-04 22:22:00 · 854 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap1.1]
1.1 C++对象模型 本节主要叙述了简单对象模型,表格驱动对象模型以及cfront中采用的对象模型特征,但是并未描述虚拟继承与引入多态的模型,将其留待3.4节。 C++中类具有两种数据成员――static与non-static,三种成员函数――static, non-static与virtual,如下例所示(同时也是本节关于不同对象模型图示的来源):class Point{ public:原创 2006-09-04 22:00:00 · 1096 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap1.2]
1.2 关键字带来的差异本节主要讨论struct与class带来的困扰问题,综合struct与class的比较如下:1. C++中struct具有了“类”的功能,其与关键字class的区别在于struct中成员变量和函数的默认访问权限为public,而class的为private;2. C++中的struct保持了对C中struct的全面兼容,因而,下面的操作是合法的:struct st原创 2006-09-04 22:04:00 · 839 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap2.1]
2.1 Default Constructor建构操作全局对象的内存(数据区)会在程序激活的时候清为0,局部对象的内存(栈区)以及堆对象的内存(自由存储区)都不一定清0,其内存为上次使用后的遗迹。根据C++ Standard,对于类X,如果没有任何用户声明的构造函数,那么编译器将会隐式地产生一个默认构造函数,但不作任何动作,被喻为trivial构造函数,与之相对应的,编译器隐式产生的原创 2006-09-04 22:11:00 · 951 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap2.3]
2.3 程序转换语意学2.3.1 显式初始化class X { …… };X x0;X x1( x0 );X x2 = x0;X x3 = X( x0 );程序转化分为两个阶段:1. 重写每一个定义,将其中的初始化操作剥离;2. 将类X的拷贝构造函数调用安插到代码中,伪码如下:X x1;X x2;X x3;x1.X::X( x0 );原创 2006-09-04 22:17:00 · 854 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap3.0]
3.0 引言分析如下类的继承体系:class X { …… };class Y : public virtual X { …… };class Z : public virtual X { …… };class A : public Y, public Z { …… };执行sizeof( ClassName )结果为1,8,8,12(未优化)或1,4,4,原创 2006-09-04 22:20:00 · 842 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap3.4]
3.4 继承与数据成员在C++继承模型中,派生类对象所表现出来的东西是其增加的成员加上其基类成员的总和,至于基类与派生类成员的排列次序则没有强制规定。本节讨论继承对类的影响,分如下几种情况:3.4.1 单继承且不含虚函数一般而言,具体继承(相对于虚拟继承)并不会增加空间(注意边界对齐准则)或存取时间上的额外负担。将独立的类凑成一对“type/subtype”,并带有继承关系,一般易原创 2006-09-04 22:26:00 · 975 阅读 · 1 评论 -
Inside the C++ Object Model学习笔记[Chap3.5-3.6]
3.5 成员对象的效率简要列出作者测试的几个策略:1. 针对三个float元素做组成的局部数组;2. 把上面的数组元素转化为C中的结构形式;3. 定义独立的类进行存取:① 用inline函数传回引用的方式;② 返回值的方式;4. 将上面定义的类改写成三层单一非虚拟继承的方式;5. 采用三层单一虚拟继承的方式。3.6 指向数据成员的指针在类中取某个成员的地址(如&Cl原创 2006-10-21 10:26:00 · 929 阅读 · 0 评论 -
Inside the C++ Object Model学习笔记[Chap4.3-4.4]
4.3 指向成员函数的指针取一个非静态数据成员的地址,得到的是该成员在类布局中的偏移量(未优化时还需要加1),它需要被绑定到某个类对象的地址上才可以存取;而取一个非静态成员函数的地址,若为非虚函数,那么得到的是在内存中的真正地址,但也需要被绑定到某个类对象的地址上,才能够通过它调用该函数,对于所有的非静态成员函数都需要对象的地址,即参数this指针。如果取一个虚函数地址,那么其在编译期间是未知原创 2006-10-21 10:31:00 · 975 阅读 · 0 评论 -
C++动态内存创建与内存管理学习笔记[2]
2 C中内存分配A malloc:原型为void* malloc(size_t size);在内存中的动态存储区中分配一个长度为size的空间,返回指向大小为size的内存区域首地址的void指针;用户必须决定对象的长度,即申请空间的大小。同时,malloc只是分配了一块返回值为void*的内存而不是生成一个对象。由于malloc返回值的类型是void*,所以在调用malloc时要显式地进行类原创 2006-10-21 10:16:00 · 925 阅读 · 0 评论 -
C++动态内存创建与内存管理学习笔记[3]
3 C++中动态内存创建3.1 new operator与delete operatorC++中动态内存创建new operator分为两个步骤:在堆里为对象分配内存(C++中的operator new具有内置的长度计算,类型转换与安全检查);如果内存分配成功,则为该内存调用合适的构造函数进行初始化。new operator实际上总以标准C中的malloc()完成,同时delete o原创 2006-10-21 10:20:00 · 887 阅读 · 0 评论 -
直接初始化与拷贝初始化学习笔记
[说明] 本文是根据Herb Sutter的《More Exceptional C++》条款36的精简翻译笔记,不明之处,参考原文。1、直接初始化:使用单个构造函数(可能是转换构造函数)来初始化对象,形式如“T t(u)”。2、拷贝初始化:使用拷贝构造函数来初始化对象,有必要的话会在此之前,先调用一个用户自定义的类型转换,形式如“T t=u”。注意:一般而言,在变量初始化时,尽量采翻译 2006-11-10 10:21:00 · 1571 阅读 · 0 评论