摘要:很多人对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 herepublic borrowableitem, // (some libraries loan mp3 players)public electronicgadget{ ... }; // class definition is unimportantmp3player 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......