文章分类 -  C++转载

上一页 1 2 3 4 5 6 7 8 9 下一页
网上搜索的C++转载文章
C++多继承中重写不同基类中相同原型的虚函数
摘要:在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数。下面就是一个例子:class CBaseA{public: virtual void TestA();};class CBaseB{public: virtual void TestB();};class CDerived : public CBaseA, public CBaseB{public: virtual void TestA... 阅读全文
posted @ 2010-05-31 23:43 carekee 阅读(729) 评论(0) 推荐(1) 编辑
小心使用STL中map的[]操作符
摘要:一个map就是一个(关键码(key),值(value))对偶的序列,它提供基于关键码的快速提取操作。也就是说,可以用下标运算符[]将关键码作为下标去执行查找,并返回对应的值。因此可以把map的使用方法想象成有特殊下标的数组。在很多时候用下标运算符[]来对map中的元素进行存取是非常方便和简单的;但是,如果map下标运算符[]运用不得当,也会造成意想不到的问题。 我们知道,C++是不检查下标越界的。... 阅读全文
posted @ 2010-05-31 23:42 carekee 阅读(980) 评论(1) 推荐(0) 编辑
浅析C++中的this指针
摘要:有下面的一个简单的类:class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int iTest); void Test4();private: static int m_iStatic; int m_iTest;};int CNullPointCall::m_iStatic = 0;void CNull... 阅读全文
posted @ 2010-05-31 23:41 carekee 阅读(208) 评论(0) 推荐(0) 编辑
浅析C++中虚函数的调用及对象的内部布局
摘要:在我那篇《浅析C++中的this指针》中,我通过分析C++代码编译后生成的汇编代码来分析this指针的实现方法。这次我依然用分析C++代码编译后生成的汇编代码来说明C++中虚函数调用的实现方法,顺便也说明一下C++中的对象内部布局。下面所有的汇编代码都是用VC2005编译出来的。虽然,不同的编译器可能会编译出不同的结果,对象的内部布局也不尽相同;但是,只要是符合C++标准的编译器,编译结果和对象的... 阅读全文
posted @ 2010-05-31 23:41 carekee 阅读(253) 评论(0) 推荐(1) 编辑
C++中一个容易被忽视的名字查找规则
摘要:现在,有下面的代码:namespace lx1{ class Point3d { public: Point3d (double dx, double dy, double dz) : m_dX(dx), m_dY(dy), m_dZ(dz) {} double getX() const { return m_dX; }; double getY() const { return m_dY; };... 阅读全文
posted @ 2010-05-31 23:40 carekee 阅读(442) 评论(0) 推荐(0) 编辑
C++中friend对类封装性的强大破坏性
摘要:写这篇文章的动机来源于网友purewinter在我的那篇《重读《设计模式》之学习笔记(三)--SINGLETON模式的疑惑》中的评论。 在那篇文章中,我提供了如下一个用C++实现的Singletion模式的小例子:class ClxSingletonMEC{public: friend ClxSingletonMEC& InstanceMEC();private: ClxSingleton... 阅读全文
posted @ 2010-05-31 23:39 carekee 阅读(396) 评论(0) 推荐(0) 编辑
用枚举定义有意义的数组下标
摘要:在开发中,经常会用到一些数组,它里面存放一定数量(已知,不是太多)的特定元素。在使用数字表示的数组下标访问数组中元素的时候,根本不知道该元素是否是需要的那个元素,而且使代码可读性降低,甚至还会出现下标越界的危险。 比如,现在有如下的继承体系:class CShape;class CSquare : public CShape;class CRectangle : public CShape;cla... 阅读全文
posted @ 2010-05-31 23:38 carekee 阅读(1325) 评论(0) 推荐(0) 编辑
让你编写的类也有类型信息
摘要:比如说有这样一个类的继承体系:类CDerivedA和CDerivedB都继承自类CBase。如果要写一个函数传入上面类中的一个对象的引用,在函数里面我们要根据对象的类型来进行相应的处理,也就是说对不同类型的对象进行不同的处理。在这种情况下我们就需要类的对象中保存有类型信息。下面就用一个简单的例子来说明怎么让自己编写的类有类型信息。 首先,根据类的继承关系创建类型信息tag:struct lx_Ba... 阅读全文
posted @ 2010-05-31 23:37 carekee 阅读(275) 评论(0) 推荐(0) 编辑
引用计数(Reference Counting)和代理(Proxy)的应用
摘要:引子 如果让你用C++写一个实用的字符串类,我想下面的方案是很多人最先想到的:class ClxString{public: ClxString(); ClxString(const char *pszStr); ClxString(const ClxString &str); ClxString& operator=(const ClxString &str); ~Clx... 阅读全文
posted @ 2010-05-31 23:36 carekee 阅读(410) 评论(0) 推荐(0) 编辑
STL中bind2nd的用法
摘要:比如我们有下面的类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout << "Output from method DoSomething!" << endl; return 0; };}; 和下面的一个vector:vector<ClxECS*> vECS;for (int i ... 阅读全文
posted @ 2010-05-31 23:35 carekee 阅读(396) 评论(0) 推荐(0) 编辑
C++中重载决议与可访问性检查的顺序
摘要:对于如下的类:class ClxECS{public: double Test(double dValue) { return dValue * 13; };private: int Test(int iValue) { return iValue * 13; };}; 下面的函数输出是什么?void ECS_test(){ int iValue = 13; ClxECS lx; cout <... 阅读全文
posted @ 2010-05-31 23:34 carekee 阅读(282) 评论(0) 推荐(0) 编辑
C++中的mutable关键字
摘要:mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数... 阅读全文
posted @ 2010-05-31 23:34 carekee 阅读(165) 评论(0) 推荐(0) 编辑
C++中巧用#define访问类的私有成员
摘要:我们知道,类的私有成员在类的外部是不能被访问的。 例如有下面的这个简单的类:class ClxECS{private: int iPrivate;}; 那么下面的这个函数是不能通过编译的:void ECS_test(){ ClxECS lx; lx.iPrivate = 13; cout << lx.iPrivate << endl;} 但是,我们并不是没有办法来访问类的... 阅读全文
posted @ 2010-05-31 23:33 carekee 阅读(904) 评论(0) 推荐(0) 编辑
STL中mem_fun和mem_fun_ref的用法
摘要:怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现。 比如有如下的一个类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout << "Output from method DoSomething!" << endl; return 0; };}; 现在定义如下一个vect... 阅读全文
posted @ 2010-05-31 23:32 carekee 阅读(236) 评论(0) 推荐(0) 编辑
C++中的显式构造函数
摘要:有如下一个简单的复数类:class ClxComplex{public: ClxComplex(double dReal = 0.0, double dImage = 0.0) { m_dReal = dReal; dImage = dImage; } double GetReal() const { return m_dReal; } double GetImage() const { retu... 阅读全文
posted @ 2010-05-31 23:30 carekee 阅读(278) 评论(0) 推荐(0) 编辑
再论C++中接口与实现分离的技术
摘要:我在今年2月份写了篇《C++中接口与实现分离的技术》的文章,用一个很简单的例子说明了在C++中接口与实现分离的好处及实现方法。很荣幸,这篇文章被推荐到了CSDN的首页并被多家网站转载。 可是当时写那篇文章的时候,没有考虑到类与类之间的继承关系。下面我就来具体的谈谈这个方面。 还是以上面提到的那篇文章中的例子来说明。 执行类: lxImplement.h文件内容:#include "lxTest.h... 阅读全文
posted @ 2010-05-31 23:29 carekee 阅读(289) 评论(0) 推荐(0) 编辑
巧用构造函数与析构函数对数据进行设置和恢复
摘要:在开发的时候会遇到这种情况,就是在执行某些功能的时候要对一些环境变量或配置信息进行修改,功能执行完毕之后再把这些变量或配置信息设置恢复回去。举个例子:有些游戏只能在分辨率为800*600的环境下运行,如果要在分辨率1024*768的电脑上玩,就要在运行游戏的时候把分辨率改为800*600,退出游戏的时候再把分辨率改回1024*768。 其实处理这样的情况也不是很难,我们可以写一个设置环境变量或配置... 阅读全文
posted @ 2010-05-31 23:29 carekee 阅读(376) 评论(0) 推荐(0) 编辑
小心C++编译器的陷阱
摘要:有下面一个简单的类:class ClxTest{public: ClxTest(int iSize = 13) { pszStr = new char[iSize]; }; ~ClxTest() { if(pszStr) delete []pszStr; }; lxOutput() { cout << pszStr << endl; };private: char *psz... 阅读全文
posted @ 2010-05-31 22:51 carekee 阅读(179) 评论(0) 推荐(0) 编辑
C++中禁止类被派生的方法
摘要:在我的那篇“C++中虚析构函数的作用”中我说明了为什么作为基类的类的析构函数必须是虚函数,同时也指出:为了避免产生虚函数表,如果类不是基类的话,析构函数就不需要声明为虚函数。 但是,我们不能预料用户的行为,你不敢肯定用户是否会从你的类去派生自己的类。如果用户以一个基类指针去删除一个派生类的对象,就会发生派生类的析构函数不被调用的情况。这样做的危险性我想大家都知道。当然,你可... 阅读全文
posted @ 2010-05-31 21:50 carekee 阅读(800) 评论(0) 推荐(0) 编辑
C++中虚析构函数的作用
摘要:我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout << "Do something in class ClxBase... 阅读全文
posted @ 2010-05-31 21:45 carekee 阅读(215) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 下一页