相关分类: Java技术 C/C++ VB delphi
  • 验C 中接口和实现分离的技术

    在用C 写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文档里只提供要暴露的公共成员函数的声明,类的其他任何信息都不会在这个头文档里面显示出来。这个时候就要用到接口和实现分离的技术。 下面用一个最简单的例子来说明。 类Clx...

    2008-02-23 05:27:17

  • C 箴言:为类型信息使用特征类

    STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的,但是也有几个 utility templates(实用模板)。其中一个被称为 advance。advance 将一个指定的 iterator(迭代器)移动一个指定的距离: templatetypename Iter...

    2008-02-23 05:27:16

  • C 对象布局及多态探索之菱形结构虚继承

    这次我们看看菱形结构的虚继承。虚继承的引入本就是为了解决复杂结构的继承体系问题。上一篇我们在讨论虚继承时用的是个简单的继承结构,只是为了打个铺垫。 我们先看看这几个类,这是个典型的菱形继承结构。C100和C101通过虚继承共享同一个父类C041。C110则从C100和C1...

    2008-02-23 05:27:16

  • C 箴言:如何访问模板化基类中的名字

    假设我们要写一个应用程式,他能够把消息传送到几个不同的公司去。消息既能够以加密方式也能够以明文(不加密)的方式传送。假如我们有足够的信息在编译期间确定哪个消息将要发送给哪个公司,我们就能够用一个 template-based(模板基)来解决问题: class CompanyA {...

    2008-02-23 05:27:14

  • C 箴言:理解typename的两个含义

    问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? templateclass T class Widget; // uses "class" templatetypename T class Widget; // uses "typename" 答案:没什么不同。在声明一个 template type parameter(模板类型参数)的...

    2008-02-23 05:27:14

  • C 对象布局及多态实现探索之虚继承

    下面我们来看虚继承。首先看看这C020类,他从C010虚继承:} struct C010 { C010() : c_(0x01) {} void foo() { c_ = 0x02; } char c_; }; struct C020 : public virtual C010 { C020() : c_(0x02) {} char c_; }; 运行如下代码,查看对象的内存布局: PRINT_SIZE_DETAIL...

    2008-02-23 05:27:12

  • C 对象布局及多态之虚成员函数调用

    在构造函数中调用虚成员函数,虽然这是个不很常用的技术,但研究一下能够加深对虚函数机制及对象构造过程的理解。这个问题也和一般直观上的认识有所差异。先看看下面的两个类定义。 struct C180 { C180() { foo(); this-foo(); } virtual foo() { cout " C180.foo this:...

    2008-02-23 05:27:12

  • C 箴言:理解隐式接口和编译期多态

    object-oriented programming(面向对象编程)的世界是围绕着 explicit interfaces(显式接口)和 runtime polymorphism(执行期多态)为中央的。例如,给出下面这个(没有什么意义的)的 class(类)。 class Widget { public: Widget(); virtual ~Widget(); virtual s...

    2008-02-23 05:27:11

  • C 程式设计从零开始之语句

    前面已说过程式就是方法的描述,而方法的描述无外乎就是动作加动作的宾语,而这里的动作在C 中就是通过语句来表现的,而动作的宾语,也就是能够被操作的资源,但很可惜地C 语言本身只支持一种资源——内存。由于电脑实际能够操作不止内存这一种资源,导致C 语言实际并不...

    2008-02-23 05:27:10

  • C 对象布局及多态实现探索之虚函数调用

    我们再看看虚成员函数的调用。类C041中含有虚成员函数,他的定义如下: struct C041 { C041() : c_(0x01) {} virtual void foo() { c_ = 0x02; } char c_; }; 执行如下代码: C041 obj; PRINT_DETAIL(C041, obj) PRINT_VTABLE_ITEM(obj, 0, 0) obj.foo(); C041 * pt =...

    2008-02-23 05:27:09

2