- 博客(118)
- 资源 (5899)
- 收藏
- 关注
转载 成员初始化表
成员初始化表#include class Account {public:Account();Account( const char*, double=0.0 );Account( const string&, double=0.0 );Account( const Account& );// ...private:// ...}; //注意:构造函数的初始化列表只在构造函数的定义中指定,而不在声
2014-07-29 16:46:03 2150
转载 拷贝构造函数
拷贝构造函数有三种情况,会以一个object的内容作为另一个class object的初值。最明显的一种情况当然就是对一个object做明确得初始化操作,像这样:class X{…};X x;//明确地以一个object的内容作为另一个class object的初值X xx = x;另两种情况是当object被当做参数交给某个函数时,以及当函数传回一个class object时。假设class设计
2014-07-29 16:44:39 1701
转载 指向数据成员的指针
指向数据成员的指针指向数据成员的指针,是一个有点神秘又颇有用处的语言特性,特别是如果你需要详细调查class members的底层布局的话。这样的调查可以用于决定vptr是放在class的起始处或者尾端。另外一个用途是可以用来决定class中的access sections的次序。考虑下面的Point3d声明。其中有一个virtual function,一个static data member,以
2014-07-29 16:42:55 1584
转载 链接指示符extern “C”
链接指示符extern “C”extern“C”的使用方式如果程序员希望调用其他程序设计语言(尤其是C)写的函数,那么,调用函数时必须告诉编译器使用不同的要求。例如,当这样的函数被调用时,函数名或参数排列的顺序可能不同,无论是C++函数调用它,还是用其他语言写的函数调用它。程序员用链接指示符(linkage directive)告诉编译器,该函数是用其他的程序设计语言编写的,链接指示符有两种形式:
2014-07-29 16:41:50 2294
转载 数据成员的布局
数据成员的布局已知下面一组数据成员:class Point3d{public://…private:float x;static List *freeList;float y;static const int chunkSize = 250;float z;}非静态数据成员在class object中的排列顺序将和其被声明的顺序一样,任何中间介入的静态数据成员如freeList和chunkSize
2014-07-29 16:41:37 1737
转载 C++中的虚函数
C++中的虚函数(virtual function)简介缺省情况下,类的成员函数是非虚拟的。当一个成员函数为非虚拟的时候,通过一个类对象(指针或引用)而被调用的该成员函数,是该类对象的静态类型中定义的成员函数。当成员函数是虚拟的时候,通过指针或引用而被调用的该成员函数,是在该类对象的动态类型中被定义的成员函数。但是,正如所发生的,类对象的静态和动态类型是相同的,所以虚拟函数机制只在使用指针和引用时
2014-07-29 16:38:00 1454
转载 指向函数的指针
指向函数的指针假定我们被要求提供一个如下形式的排序函数:sort( start, end, compare );start 和end 是指向字符串数组中元素的指针。函数sort()对于start 和end 之间的数组元素进行排序。compare 定义了比较数组中两个字符串的比较操作。该怎样实现compare 呢?我们或许想按字典顺序排序数组内的字符串,或许想按长度排序它们,以便将最短的字符串放在前
2014-07-29 16:38:00 1505
转载 C++中指向成员函数的指针
指向成员函数的指针 取一个非静态成员函数的地址,如果该函数是nonvirtual,则得到的结果是它在内存中真正的地址。然而这个值也不是完全的,它也需要被绑定于某个class object的地址上,才能够通过它调用该函数。所有的非静态成员函数都需要对象的地址(以参数this指出)。一个指向成员函数的指针,其声明语法如下所示:double //return type(Point:
2014-07-29 16:37:27 1552
转载 C++中的成员函数
成员函数假设有一个Point3d的指针和对象:Point3d obj;Point3d *ptr = &obj;当进行如下操作:obj.mormalize();ptr->normalize();时,会发生什么事情呢?其中的Point3d::normalize()定义如下:Point3d Point3d::normalize() const{ register float mag = magni
2014-07-29 16:36:22 5313
转载 C++中对象的大小
C++中对象的大小需要多少内存才能表现一个class object?一般而言要有:n 其nonstatic data members的总和大小;n 加上任何由于字节对齐需要而填充上去的空间(可能存在与members之间,也可能存在于集合体边界);n 加上为了支持virtual而由内部产生的任何额外负担。 C++中实际对象的大小,不同编译器的实现是不一样的,以下仅讨论.net2008,其他编译
2014-07-29 16:19:47 1691
转载 RTTI 运行时类型识别
RTTI 运行时类型识别《c++ primer》3thRTTI(运行时类型识别)允许“用指向基类的指针或引用来操纵对象”的程序能够获取到“这些指针或引用所指对象“的实际派生类型。在c++中,为了支持RTTI,提供了两个操作符:1、dynamic_cast 操作符,它允许在运行时刻进行类型转换,从而使程序能够在一个类层次结构中安全地转换类型,把基类指针转换成派生类指针,或把指向基类的左值转换成派生类
2014-07-29 16:19:01 1335
转载 嵌套类 局部类
嵌套类局部类《c++ primer 3th》嵌套类一个类可以在另一个类中定义,这样的类被称为嵌套类。嵌套类是其外围类的一个成员。嵌套类的定义可以出现在其外围类的公有、私有或保护区中。嵌套类的名字在其外围类域中是可见的,但是在其他类域或名字空间中是不可见的,这意味着,嵌套类的名字不会与外围域中声明的相同名字冲突。例如:class Node { /* ... */ };class Tree {publ
2014-07-29 16:18:12 1392
转载 public private 和protected 继承
public private 和protected 继承 在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,private继承是最少见的继承关系。1. public从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,派生类可以代替基类完成基类接口所声明的行为,也就是必须符合“Lisk
2014-07-29 16:16:20 1578
转载 shared_ptr解析
shared_ptr解析《超越C++标准库-Boost库导论》头文件: "boost/shared_ptr.hpp"几乎所有稍微复杂点的程序都需要某种形式的引用计数智能指针。这些智能指针让我们不再需要为了管理被两个或多个对象共享的对象的生存期而编写复杂的逻辑。当引用计数降为零,没有对象再需要这个共享的对象时,这个对象就自动被销毁了。引用计数智能指针可以分为侵入式(intrusive)和非侵入式(n
2014-07-29 16:15:00 1622
转载 auto_ptr解析
auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心地使用它才能保证不出错,以至于它甚至无法适用于同是标准库中的那么多的容器和一些算法,但即使如此,我们仍然不能否认这个小小的auto_ptr所蕴含的价值与理念。
2014-07-29 16:13:12 1282
转载 scoped_ptr解析
scoped_ptr解析《超越C++标准库-Boost库导论》头文件: "boost/scoped_ptr.hpp"boost::scoped_ptr 用于确保动态分配的对象能够被正确地删除。scoped_ptr有着与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权,然而auto_ptr却可以。事实上,scoped_ptr永远不能被复制或被赋值!scoped_ptr拥有它所指
2014-07-29 16:11:51 1522
转载 C++中const、volatile、mutable的用法
const、volatile、mutable的用法const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value; TYPE const value; 这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。例如:const int nValue
2014-07-29 15:57:55 1194
转载 虚拟继承
虚拟继承《c++ primer 3th》p813在缺省情况下,C++中的继承是按值组合的一种特殊情况。当我们写:class Bear : public ZooAnimal { ... };每个Bear 类对象都含有其ZooAnimal 基类子对象的所有非静态数据成员,以及在Bear中声明的非静态数据成员。类似地,当派生类自己也作为一个基类对象时,如:class PolarBear : public
2014-07-29 15:52:11 1395
转载 C++中的volatile用法
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic var
2014-07-29 15:51:16 1247
原创 C++中的多态-虚函数-纯虚函数-抽象类
这么一大堆名词,实际上就围绕一件事展开,就是多态,其他三个名词都是为实现C++的多态机制而提出的一些规则,下面分两部分介绍,第一部分介绍【多态】,第二部分介绍【虚函数,纯虚函数,抽象类】一 【多态】多态的概念 :关于多态,好几种说法,好的坏的都有,分别说一下:1指同一个函数的多种形态。个人认为这是一种高手中的高手喜欢的说法,对于一般开发人员是一种差的不能再差的概念,简直是对人的误导,然人很容易就靠
2014-07-29 15:41:15 2219 1
原创 虚拟继承与虚基类
虚拟继承与虚基类实际上是说了同一件事,只是不同的书表达不同,在这里还是推荐虚拟继承这种说法(因为有人总问虚基类是什么,这里可以解释为虚基类就是虚拟继承,一种继承的方式,有的书偏要把一个动作写成一个名词,不负责任)。虚拟继承是C++继承的一个特殊方法,用来达到特殊的目的。要达到什么目的呢?那就是避免继承机制下的二义性问题(二义性:程序产生两种或多种可能,把编译器搞的不知所措) 继承机制下的二义性一般
2014-07-29 15:27:50 1599
转载 数据成员的存取与布局
数据成员的布局已知下面一组数据成员:class Point3d{public://…private:float x;static List *freeList;float y;static const int chunkSize = 250;float z;} 非静态数据成员在class object中的排列顺序将和其被声明的顺序一样,任何中间介入的静态数据成员如freeList和c
2014-07-29 15:12:16 1305
转载 关于C++中的虚拟继承的一些总结
新随笔联系管理2014年7月>日一二三四五六293012345678910111213141516171819202122232425262728293031123456789统计随笔 - 75文章 - 16评论 - 320引用 - 0公告昵称:VincentCZW园龄:2年2个月粉丝:133关注:8+加关注搜索 常用链接我的随笔我的评论我的参与最新评论我的标签随笔分类(76)Android(1
2014-07-29 15:02:36 1143
转载 智能指针类
除了使指针成员与指针完全相同之外,另一种方法是定义所谓的智能指针类。智能指针除了增加功能外,其行为像普通指针一样。本例中让智能指针负责删除共享对象。用户将动态分配一个对象并将该对象的地址传给新的 HasPtr类。用户仍然可以通过普通指针访问对象,但绝不能删除指针。HasPtr 类将保证在撤销指向对象的最后一个 HasPtr 对象时删除对象。 新的 HasPtr 类需要一个析构函数来删除
2014-07-29 15:01:42 1199
转载 C++ Primer 笔记--13章:定义值型类
要使指针成员表现得像一个值,复制 HasPtr 对象时必须复制指针所指向的对象。复制构造函数不再复制指针,它将分配一个新的 int 对象,并初始化该对象以保存与被复制对象相同的值。每个对象都保存属于自己的 int 值的不同副本。因为每个对象保存自己的副本,所以析构函数将无条件删除指针。赋值操作符不需要分配新对象,它只是必须记得给其指针所指向的对象赋新值,而不是给指针本身赋值。
2014-07-29 14:50:31 1096
原创 C++中static要点总结
C++中static要点总结1、静态成员的提出是为了解决数据共享的问题。2、因为静态成员函数是属于类的一部分,而不是某个对象的一部分,因此静态成员函数没有this指针,this指针是用于指向某个对象的。又因为静态成员函数没有this指针,因此在静态成员函数中不能直接调用非静态成员,因为非静态成员都是通过指向对象的this指针隐式或显式调用的。在静态成员函数的实现中不能直接引用类中说明的非静态成员,
2014-07-29 14:44:18 1197
转载 陈皓:C++ 虚函数表解析----笔记
文章链接:http://blog.csdn.net/haoel/article/details/1948051虚函数表 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual T
2014-07-29 14:29:39 1922
转载 vim常用命令
注意事项: 修改完代码之后,一定要保存,再重新编译。一、光标移动1、向后移动w:使得光标向前移到一个单词;b:向后移动一个单词;e:也是向前移到一个单词,但是将光标定位在单词的结尾处;ge:则是向后移到一个单词并到达前一个单词的结尾处。二、跳转1、跳至文件头尾 gg:文件头 G:文件尾2、返回之前的位置CTRL-O takes you back to older
2014-07-29 14:01:58 1346
转载 父类指针向子类指针的强制类型转换
结论:定义一个父类对象,将该父类对象的指针强制类型转换为子类指针,并赋给一个子类指针,则:该子类指针将指向该父类对象,但是其this指针仍然是指向子类的指针。当该指针调用虚成员函数时,将按照对象的内存布局(指向虚函数表的指针存储在该对象的前四个字节)调用父类虚成员函数。当该指针调用普通成员函数时,将通过this指针调用位于代码段的该子类的成员函数。例1、非虚成员函数typedef void(*fu
2014-07-29 13:48:16 8235 1
转载 Virtual Inheritance
C++ primer:Virtual Inheritance:A base class is specified as being derived through virtual inheritance by modifying its declaration with the keyword virtual.个人修正:A base class is specified as being deri
2014-07-29 13:25:12 1382
转载 c++ virtual总结
c++是一门面向对象的语言,但是它和c#,java不同,它没有反射机制。没有反射机制使得c++在语言的一些设计方面与其他语言有点不一样,主要体现在智能化方面,许多东西得程序员明确指定,例如本文要讲的virtual关键字。virtual是在运行时才体现的,而c++在运行时无法使用反射来确定当前类的父类是否有此方法,此方法是否被重载等信息,所以必须在写代码时用virtual来明确指明,然后通过编译器做
2014-07-29 12:50:58 1341
转载 Virtual Destructor
Base *b = new Derived();// use bdelete b; // Here's the problem!如果析构函数不是虚函数,则运行哪个析构函数是由该指针的类型决定的。如上例,若类Base的析构函数不是虚函数,而b指向的类型是派生类型的,此时delete b是undefined behaviour。若果析构函数是虚函数,则运行哪个析构函数由该指针指向的对象的类型决定。
2014-07-29 12:50:42 1470
转载 Function Pointer of class member function (类的成员函数指针)
From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx个人感觉对于类的成员函数指针这块讲解的比较深入详细推荐阅读///////////////////////////////////////////////// 先看这样一段代码 class test { public: test(int i){ m_i=
2014-07-29 11:36:28 1606
转载 虚函数的真相(VC编译器如何实现“virtual ”规则)
可到 CSDN 下载中心下载全文 http://download.csdn.net/detail/Dreamcode/201005 ( 1 )virtual 虚函数 先看一段简单代码:基类的“Output”函数是个虚函数。那么,很明显地,程序的运行结果将是: ( 2) virtual function table 虚函数表先来分析我们的main函数中的Derive类的对象obj,看看它的内存布
2014-07-29 11:01:29 1649
转载 virtual function的两个优化
http://www.humus.name/index.php?page=Comments&ID=321http://www.gamedev.net/reference/articles/article2763.asp 这俩真是欢啊。 humus这篇说d3d的api都是virtual function call,这性能损失很心疼。所以就弄个callback函数,然后到d3ddevice的virtu
2014-07-29 10:57:29 1091
转载 virtual function的一些心得
virtual function是design上一个非常好的东西,它可以在保持面向接口编程的前提下做到运行时刻动态决定使用某一种实现。而且使得代码的语义表达,设计美感都好很多。问题就是virtual function太费了。对于pc平台来说,它是乱序执行的cpu,cache miss还可以忍受,对于console平台,这种顺序执行的处理器,cache miss会带来非常大的性能损失。virtual
2014-07-29 10:25:40 1505
转载 win32平台关于“pure virtual function call”的解释
本博客(http://blog.csdn.net/livelylittlefish )贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Explanation about “pure virtual function call” on Win32 platform Content0. Introduction1. an example2. Disassemble code
2014-07-29 10:14:47 2949
转载 Pure virtual function called
The C++ Source "Pure Virtual Function Called": An Explanation by Paul S. R. Chisholm February 26, 2007 AdvertisementSummary"Pure virtual function called" is the dying message of the occasional crashed
2014-07-29 10:14:04 2884
转载 The virtual functions table
To implement virtual functions, C++ uses a special form of late binding known as thevirtual table. The virtual table is a lookup table of functions used to resolve function calls in a dynamic/late bin
2014-07-29 10:05:11 1223
qt-win-noncommercial-msvc-3.2.1
2014-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人