C++
文章平均质量分 56
zxpost1927
这个作者很懒,什么都没留下…
展开
-
C++初始化成员列表
C++初始化类的成员,不但可以用构造函数(constructor)完成,而且可以用初始化类成员列表来完成。MFC大量用到此方法。例如有些初学者可能不大理解如下代码:class A{ public: int member_var; //成员变量 A(); //构造函数}A::A():member_var(0){} 他们觉转载 2008-04-23 15:17:00 · 296 阅读 · 1 评论 -
explicit关键字
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}....MyClass原创 2008-05-24 13:48:00 · 147 阅读 · 0 评论 -
static_cast揭密
[ 翻译文档 本文适合初级读者 已阅读12900次 ]转载 2008-05-24 15:41:00 · 147 阅读 · 0 评论 -
C++类实例大小
初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能.首先:我们要知道什么是类的实例化,所谓类的实例化就是在内存中转载 2008-05-26 23:35:00 · 168 阅读 · 0 评论 -
弄清C++在幕后为你所写、所调用的函数
一个空类什么时候不是空类? ---- 当C++编译器通过它的时候。如果你没有声明下列函数,体贴的编译器会声明它自己的版本。这些函数是:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写:class Empty{};和你这么写是一样的:class Empty {原创 2008-06-23 21:48:00 · 176 阅读 · 0 评论 -
CORBA Programming with TAO - 4.Basic Functions(常用基本方法解析)
摘要:简要介绍CORBA规范定义的几个常用基本方法的功能及应用中需要注意的问题。正文:idl编译器会为每个在idl中声明的interface生成一个对应的代理基类:class InterfaceName;以及两个对象引用类型:InterfaceName_ptr和InterfaceName_var前者是一个指针类型,其定义往往是:typedef Int转载 2008-12-21 16:26:00 · 249 阅读 · 0 评论 -
CORBA Programming with TAO - 6.Naming Service(使用命名服务)
摘要:命名服务(Naming Service)是CORBA定义的诸多服务中比较常用的一个, Naming Service提供的助记符解析服务使得应用程序可以借助助记符,而不是一大串IOR来访问到相应的Servant。一、简介直接将IOR串在程序间传递的做法往往比较不方便,特别是,对于非持久servant来说,每次重启Server程序时,这个IOR都会发生变化,在使用上比较不便,而转载 2008-12-21 16:46:00 · 652 阅读 · 0 评论 -
CORBA Programming with TAO - 5.Hello World(简单实例)
摘要:前面对CORBA编程的基础知识进行了简单介绍,本篇中,我们将实例讲解如何利用TAO中进行CORBA编程。一、编写IDL1、建一个空的Solution,然后在该Solution目录下新建一个名为idl的Win32 Static Library工程(对于一般的TAO工程,无需单独为idl建一个Project,但由于我们要重用该idl,所以单独为其建立一个工程比较便于管理)。转载 2008-12-21 16:33:00 · 347 阅读 · 0 评论 -
CORBA Programming with TAO - 9.Postscript(后记)
摘要:这是整个系列的最后一篇,对整个系列及该系列未涵盖的内容进行了总结,同时对CORBA及分布式对象计算技术的发展状况进行了简单分析。正文:CORBA本身是一个复杂的体系,本系列只是初步介绍了用TAO进行分布式CORBA应用的基础知识,并有选择性地略去了部分内容(如DynAny、POA Policy、Persistent Object等,关于POA Policy的相关内容可阅读参转载 2008-12-21 17:29:00 · 227 阅读 · 0 评论 -
CORBA Programming with TAO - 2.Compile Source Code(编译ACE/TAO/CIAO)
摘要:简要介绍如何在Windows平台上编译ACE/TAO/CIAO,及编译过程中需注意的问题。正文:随着ACE/TAO/CIAO研究者研究的不断深入,整个平台变得越来越庞大,涉及的工程及目录数目也越来越多,下面简要介绍一下如何在Windows平台上编译ACE/TAO/CIAO,其过程在其它平台上是类似的。一、目录结构在开始之前,先简要介绍一下整个产品的目录结构。ACE(转载 2008-12-21 17:32:00 · 369 阅读 · 0 评论 -
CORBA Programming with TAO - 3.IDL Data Type(数据类型与Mapping)
摘要:简要介绍TAO支持的IDL数据类型及其C++ Mapping关系。一、简单基本数据类型(Simple Basic Types)TAO支持以下简单基本数据类型(%TAO_ROOT%/tao/Basic_Types.h):IDLC++booleanCORBA::BooleancharCORBA::Char原创 2008-12-21 16:09:00 · 501 阅读 · 0 评论 -
CORBA Programming with TAO - 7.IIOP(体验IIOP--一个Java作客户端的例子)
摘要:CORBA2.0引入的IIOP(Internet Inter-ORB Protocol)是GIOP(General Inter-ORB Protocol)针对TCP/IP协议的一个实现,IIOP使得不同ORB间可以相互访问,同时也使得基于不同ORB的复杂分布式应用成为可能。一、简介TAO是一个C++ ORB,因此,我们在没有其它附加“转接”模块的情况下,仅能使用C++来直接转载 2008-12-21 17:09:00 · 384 阅读 · 0 评论 -
CORBA Programming with TAO - 8.Event Service(事件服务)
摘要:事件服务(Event Service)通过在通信的双方甚至是多方间引入一个第三方――Event Channel,一定程度上解除Client和Server之间的耦合关系,在通信的过程中,任意一方只需与Event Channel打交道,而无需确切知道对方的存在,从而使得二者由一对一的关系变成多对多的关系。一、简介CORBA除了前面讲过的基本的Naming Service(命名服转载 2008-12-21 17:24:00 · 372 阅读 · 0 评论 -
CORBA Programming with TAO - 1.Start(基本概念)
摘要:简要介绍CORBA的基本原理,并解释POA、stub、skeleton、servant等重要概念。一、CORBA及TAO简介CORBA是一个为简化跨平台应用而提出的规范,它独立于网络协议、编程语言和软硬件平台,支持异构的分布式计算环境和不同编程语言间的对象重用。CORBA可以作为不同平台应用间信息传递的中间件,CORBA通过引入经过充分验证的有效的框架结构和通信手段,最大限转载 2008-12-21 17:33:00 · 410 阅读 · 0 评论 -
C++类模板的成员函数模板写法收藏 ---------- 转
这几天本来想将Lua_Tinker移植到Linux上去的,但是由于VC中的模板写法与gcc中的模板写法有些不同之处,比如下面一段代码: struct pop_ { template static T invoke(lua_State *L, int index) { return lua2type::invoke(L, index); } templa原创 2009-10-14 23:59:00 · 599 阅读 · 0 评论 -
成员模板函数
巧用成员模板函数为你的类留下后门如果你的类需要扩展功能,除了修改源码之外,你也可以从这个类派生一个类来对这个类作扩充。比如有如下一个类。class cls{public: int fun( int a) { //一些处理 return 0; }转载 2009-10-14 23:46:00 · 577 阅读 · 0 评论 -
c++ 异常处理
第一节、使用异常一、语法规则和结构图示try { try-fields throw exception-object;}catch (exception-[object | pointer | reference] e) { catch-fields}catch (...) { ca转载 2009-10-20 22:43:00 · 584 阅读 · 0 评论 -
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。
3.1 static_cast用法:static_cast ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类转载 2008-05-24 16:06:00 · 541 阅读 · 0 评论 -
volatile
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic va转载 2008-05-24 16:09:00 · 155 阅读 · 0 评论 -
初始化和赋值的区别
赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。转载 2008-04-23 16:52:00 · 188 阅读 · 0 评论 -
C++中类的多态与虚函数的使用
类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visual BASIC 6.0 是典型的非面向对象的开发语言,但是它的确是支持类,支持类并不能说明就是支持面向对象,能够解决多态问题的语言,才是真正支持面向对象的开发的语言,所以务必提醒有过其它非面向对象语言基础的读转载 2008-04-24 16:45:00 · 164 阅读 · 0 评论 -
C++多态技术的实现和反思
面向对象技术最早出现于1960年代的Simula 67系统,并且在1970年代保罗阿托实验室开发的Smalltalk系统中发展成熟。然而对于大部分程序员来说,C++是第一个可用的面向对象程序设计语言。因此,我们关于面向对象的很多概念和思想直接来自于C++。但是,C++在实现面向对象中关键的多态性时,选择了与Smalltalk完全不同的方案。其结果是,尽管在表面上两者都实现了相似的多态性,但是在实践转载 2008-04-24 17:33:00 · 151 阅读 · 0 评论 -
虚函数与重载
虚函数是在父类中显示声明为 virtual 的函数,或更高一级的类继承而来。 继承类可以提供自己的特殊实现,也可以直接继承父类的实现。 继承的虚函数自动成为虚函数,无需特别声明(virtual)。 每一个类的虚函数指针存入 VTBL,在运行时间(runtime),根据实例的实际类型调用。 虚函数是在父类中定义为 = 0 的函数成为纯虚函数转载 2008-05-02 00:29:00 · 366 阅读 · 0 评论 -
恶草丛生的阴暗角落---虚拟机制(上)
摘要:C++是一个恶草丛生的地带,虚拟机制是很重要,但是很危险的一个C++特性,所以有必要对此作一下阐述,希望能对大家有所帮助。 什么是虚函数 简单地说,就是在成员函数前加关键字virtual,这样这个成员函数就变成了虚函数。 虚函数的思想是从Simula借来得,在C++里面算得上最显著的特征。 虚函数允许派生类取代基类所提供的实现。编译器确保当对象为派生类时,派转载 2008-04-27 20:19:00 · 1074 阅读 · 0 评论 -
恶草丛生的阴暗角落---虚拟机制(下)
虚函数的开销 人们一提到虚函数,首先想到的是多态,紧接着想到的就是开销(至少我开始的时候就是这样子的),那么虚函数的开销来自哪里?开销究竟有多大? 在理论上来讲,虚函数所带来的动态开销主要依赖于3个方面:编译器、操作系统和机器。但是在现实中,几乎所有的编译器都以同样的方式操作。调用一个虚函数的开销主要来自于2个方面,一个是如果虚函数不是内联的,就要增加一些额外的机器指令,不过一般来说也就增加转载 2008-04-27 20:20:00 · 988 阅读 · 0 评论 -
More Effective C++:理解new和delete
人们有时好像喜欢故意使C++语言的术语难以理解。比如说new操作符(new operator)和operator new的区别。 当你写这样的代码:string *ps = new string("Memory Management"); 你使用的new是new操作符。这个操作符就象sizeof一样是语言内置的,你不能改变它的含义,它的功能总是一样的。它要完成的功能分成两部分。转载 2008-04-27 21:44:00 · 319 阅读 · 0 评论 -
重载、覆盖、多态与函数隐藏(1)
经常看到C++的一些初学者对于重载、覆盖、多态与函数隐藏的模糊理解。在这里写一点自己的见解,希望能够C++初学者解惑。 要弄清楚重载、覆盖、多态与函数隐藏之间的复杂且微妙关系之前,我们首先要来回顾一下重载覆盖等基本概念。 首先,我们来看一个非常简单的例子,理解一下什么叫函数隐藏hide。#include iostream> using namespace std; class Ba转载 2008-04-27 22:12:00 · 181 阅读 · 0 评论 -
重载、覆盖、多态与函数隐藏(2)
方法名、参数相同,返回值类型不同的方法不是重载要是方法名、参数相同,返回值类型不同,那么到底调用哪一个?如果你学过C++就知道(函数)方法是以函数名指向一个地址的,Java估计也一样,标识函数的方法就是函数名+参数表. 好了,我们先来一个小小的总结重载与覆盖两者之间的特征 重载overload的特征:n 相同的范围(在同一个类中);n转载 2008-04-27 22:39:00 · 183 阅读 · 0 评论 -
重载、覆盖、多态与函数隐藏(3)
例8-2#include iostream> using namespace std; class Base...{public: virtual void fun(int i)...{ cout "Base::fun(int i)" endl; }}; class Derive : public Base...{public: void fun(int i).转载 2008-04-27 22:51:00 · 172 阅读 · 0 评论 -
重载、覆盖、多态与函数隐藏(4)
小结: 重载overload是根据函数的参数列表来选择要调用的函数版本,而多态是根据运行时对象的实际类型来选择要调用的虚virtual函数版本,多态的实现是通过派生类对基类的虚virtual函数进行覆盖override来实现的,若派生类没有对基类的虚virtual函数进行覆盖override的话,则派生类会自动继承基类的虚virtual函数版本,此时无论基类指针指向的对象是转载 2008-04-27 22:53:00 · 146 阅读 · 0 评论 -
重载与作用域
void print(void);void print(int);void print(double);int main()......{ void print(int); //print(); //error,be hidden print(1); //ok //print(1.1); //error, be hidden}void print(vo转载 2008-04-27 23:42:00 · 506 阅读 · 1 评论 -
类成员函数的重载、覆盖和隐藏区别
a.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的原创 2008-05-07 13:38:00 · 223 阅读 · 0 评论 -
VCETOR的使用
借助valgrind,终于找到一个隐藏很久的bug:class A{ };std::vectorA> vecArray;vecArray.push_back( );vecArray.push_back( );vecArray.push_back( );A & a= vecArray.back();vecArray.push_back( );以上的代码骤眼看上去也没有什么奇怪转载 2008-05-13 21:24:00 · 550 阅读 · 0 评论 -
vector常用方法
1.Vector的能力Vector模塑出一个动态数组。因此,它本身是“将元素置于动态数组中加以管理”的一个抽象概念。在末端附加或删除元素时,vector的性能相当好。可是如果你在前面或者中部安插或元素元素,性能就不怎么样了,因为操作点之后的每一个元素都必须移动另一个位置,而每一次移动都得调用assignment(赋值)操作符。在内存分配方面,可以使用reserve(),保留原创 2008-05-13 22:23:00 · 801 阅读 · 0 评论 -
友元类
1。类还有友元类,一个友元类可以访问类的私有数据,而非友元类则不能访问类的私有数据,这就实现了类的封装。2。 一个类作为另一个类的友元时,该类称为友元类。友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。 友元类可以在另一个类的公有部分或私有部分进行说明,说明方法如下: friend ; //友元类类名 使用友元类时注原创 2008-05-21 21:10:00 · 265 阅读 · 0 评论 -
合成(composition)和聚合(aggregation)的区别
聚合是勇士表示“拥有”关系,整体与部分的关系合成是一种更强的“拥有”,具有生命周期的关系 对于C/C++语言来说,合成是值的聚合(aggregation by value), 聚合是引用的聚合(aggregation by reference)原创 2009-12-15 16:08:00 · 515 阅读 · 0 评论