当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 触及 multiple inheritance (MI)(多继承)的时候,C++ 社区就会鲜明地分裂为两个基本的阵营。
 

 

 ·c/c++中的整型常识    »显示摘要«
    摘要:很多人对c/c++中的整型不太了解,导致代码移植的时候出现问题,本人在此总结一下:a. c/c++对整型长度的规定是为了执行效率,将int定义为机器字长可以取得最大的执行速度;b. c/c++中整型包括:int, char 和 enum, c++中还包含bool类型,c99中bool是一个宏,实际为_bool; c. c 和 c++ 对 enum 的规定有所不同,这里不描述;d. 修饰整型正负的有......
    摘要:普通类对象的内存布局首先我们从普通类对象的内存布局开始。c000为一个空类,定义如下:struct c000{}; 运行如下代码打印它的大小及对象中的内容。print_size_detail(c000) 结果为:the size of c000 is 1the detail of c000 is cc 可以看到它的大小为1字节,这是一个占位符。我们可以看到它的值是0xcc。在debug模式下,这表......


多继承详解
触及 multiple inheritance (mi)(多继承)的时候,c++ 社区就会鲜明地分裂为两个基本的阵营.一个阵营认为如果 single inheritance (si)(单继承)是有好处的,multiple inheritance(多继承)一定更有好处.另一个阵营认为 single inheritance(单继承)有好处,但是多继承引起的麻烦使它得不偿失.在本文中,我们的主要目的是理解在 mi 问题上的这两种看法.

class borrowableitem { // something a library lets you borrow 【程序编程相关:Remoting编程知识二

首要的事情之一是要承认当将 mi 引入设计领域时,就有可能从多于一个的 base class(基类)中继承相同的名字(例如,函数,typedef,等等).这就为歧义性提供了新的时机.例如: 【推荐阅读:Remoting中数据序列化(1)

 void checkout(); // check the item out from the library 【扩展信息:.NET Remoting编程简介

public:

 ..

};

class electronicgadget {

private:

 bool checkout() const; // perform self-test, return whether

 ... // test succeeds

};

class mp3player: // note mi here

public borrowableitem, // (some libraries loan mp3 players)

public electronicgadget

{ ... }; // class definition is unimportant

mp3player mp;

mp.checkout(); // ambiguous! which checkout?

注意这个例子,即使两个函数中只有一个是可访问的,对 checkout 的调用也是有歧义的.(checkout 在 borrowableitem 中是 public(公有)的,但在 electronicgadget 中是 private(私有)的.)这与 c++ 解析 overloaded functions(重载函数)调用的规则是一致的:在看到一个函数的是否可访问之前,c++ 首先确定与调用匹配最好的那个函数.只有在确定了 best-match function(最佳匹配函数)之后,才检查可访问性.这目前的情况下,两个 checkouts 具有相同的匹配程度,所以就不存在最佳匹配.因此永远也不会检查到 electronicgadget::checkout 的可访问性.

为了消除歧义性,你必须指定哪一个 base class(基类)的函数被调用:

mp.borrowableitem::checkout(); // ah, that checkout...

当然,你也可以尝试显式调用 electronicgadget::checkout,但这样做会有一个 "youre trying to call a private member function"(你试图调用一个私有成员函数)错误代替歧义性错误.
...   下一页
 ·函数对象概述    »显示摘要«
    摘要:顾名思义,就是在某种方式上表现得象一个函数的对象。典型地,它是指一个类的实例,这个类定义了应用操作符operator()。 函数对象是比函数更加通用的概念,因为函数对象可以定义跨越多次调用的可持久的部分(类似静态局部变量),同时又能够从对象的外面进行初始化和检查(和静态局部变量不同)。例如:class sum { int val; public:sum(int i) :val(i) { }oper......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE