相关分类: Java技术 C/C++ VB delphi
  • C 对象布局及多态实现之成员函数的调用

    从这部分开始我们除了利用内存的信息打印来进行探索外,更多的会通过跟踪和观察编译器产生的汇编代码来理解编译器对这些语言特性的实现方式。汇编方面知识的讨论超出了本文的范围,我只对和我们讨论相关的汇编代码进行解析。理解本文要讨论的知识并无需有很完整的汇编...

    2008-02-23 05:27:08

  • C 箴言:谨慎使用私有继承

    在《C 箴言:确保公开继承模拟“is-a”》一文中论述了 C 将 public inheritance(公有继承)视为一个 is-a 关系。当给定一个 hierarchy(继承体系),其中有一个 class Student 从一个 class Person 公有继承,当为一个函数调用的成功而有必要时,需要将 Students 隐式...

    2008-02-23 05:27:09

  • C 对象布局及多态实现之动态和强制转换

    为了验证前面提到过的类型动态转换(即dynamic_cast转换),连同对象类型的强制转换。我们利用前面定义的C041、C042及C082类来进行验证。 运行下列代码: c082.C041::c_ = 0x05; PRINT_VTABLE_ITEM(c041, 0, 0) PRINT_DETAIL(C041, ((C041)c082)) PRINT_VTABLE_ITEM(((C04...

    2008-02-23 05:27:06

  • C 对象布局及多态实现之带虚函数的类

    假如类中存在虚函数时,情况会怎样呢?我们知道当一个类中有虚函数时,编译器会为该类产生一个虚函数表,并在他的每一个对象中插入一个指向该虚函数表的指针,通常这个指针是插在对象的起始位置。所谓的虚函数表实际就是个指针数组,其中的指针指向真正的函数起始地址。...

    2008-02-23 05:27:08

  • C 箴言:通过composition模拟“has-a”

    composition(复合)是在 objects of one type(一个类型的对象)包含 objects of another type(另一个类型的对象)时,types(类型)之间的关系。例如: class Address { ... }; // where someone lives class PhoneNumber { ... }; class Person { public: ... priv...

    2008-02-23 05:27:05

  • C 箴言:绝不重定义继承的非虚拟函数

    假设我告诉您 class(类)D 从 class(类)B publicly derived(公有继承),而且在 class(类)B 中定义了一个 public member function(公有成员函数)mf。mf 的参数和返回值类型是无关紧要的,所以我们就假设他们都是 void。换句话说,我的意思是: class B { public...

    2008-02-23 05:27:05

  • C 对象布局及多态实现探索之内存布局

    前言 本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C 对象内存的布局情况,虚函数的执行方式,连同虚继承,等等。 写这篇文章源于我在论坛上看到的一个贴子。有人问VC使用了哪种方式来实现虚继承。当时我写了一点代码想验证一下,结果发现情况比我想象...

    2008-02-23 05:27:04

  • C 箴言:考虑可选的虚拟函数的替代方法

    现在您工作在一个视频游戏上,您在游戏中为角色设计了一个 hierarchy(继承体系)。您的游戏中有着变化多端的恶劣环境,角色被伤害或其他的健康状态降低的情况并不罕见。因此您决定提供一个 member function(成员函数)healthValue,他返回一个象征角色健康状况如何的...

    2008-02-23 05:27:03

  • C#设计模式之建造者(Builder)模式示例源代码

    using System; using System.Collections; //product public class Computer { private string Type; private Hashtable info=new Hashtable (); public Computer(string type) { Type=type; Console .WriteLine ("Conputer " type " is Builded!"); } public string t...

    2008-02-23 05:27:03

  • new和delete导致的内存分配问题详解

    在嵌入式系统中使用C 的一个常见问题是内存分配,即对new 和 delete 操作符的失控。 具备讽刺意味的是,问题的根源却是C 对内存的管理很的容易而且安全。具体地说,当一个对象被消除时,他的析构函数能够安全的释放所分配的内存。这当然是个好事情,但是这种使用的简单...

    2008-02-23 05:27:01

2