Articles

  • rsync

    Table of Contents

  • size_type, size_t, different_type and ptrdiff_t

    size_type

    在标准库 string 类型中,最容易令人产生误解就是 size() 成员函数的返回值了。 事实上,size 操作返回的是 string::size_type 类型的值。 那怎样理解 size_type 这一类型呢,我引用《C++ Primer》一段原文简单解释一下:

    string 类类型和许多其他库类型都定义了一些配套类型 (companion type)。 通过这些配套类型,库类型的使用就能和机器无关 (machine-independent)。 size_type 就是这些配套类型中的一种。 它定义为与 unsigned 型 (unsigned int 或 unsigned long) 具有相同的含义,而且可以保证足够大能够存储任意 string 对象的长度。 为了使用由 string 类型定义的 size_type 类型,程序员必须加上作用域操作符来说明所使用的 size_type 类型是由 string 类定义的。

    这里特别注意的是: 任何存储 string 的 size 操作结果的变量必须为 string::size_type 类型, 同时,使用 size_type 类型时,必须指出该类型是在哪里定义的。 切记不要把 size 的返回值赋给一个 int 变量。

  • LLVM/GDB Debugger

    GDB

    Linux中包含有一个很有用的调试工具 gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。

    和所有常用的调试工具一样,gdb提供了以下功能:

    • 监视程序中变量的值
    • 在程序中设置断点
    • 程序的单步执行
  • C/C++ Basics

    Table of Contents

    Rules

    Regular Types
    Implement Complete and Efficient Types
    Algorithm
    No Raw Loops
    Data Structure
    No incidental Data Structure

    An incidental data structure is a data structure that occurs within a system when there is no object representing the structure as a whole

    structures formed in the absence of a whole/part relationship.

    Runtime Polymorphism
    No Raw Pointers
    Concurrency
    No Raw Synchronization Primitives

    面向对象

    面向对象的三个基本特征

    1. 封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)
    2. 继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式。
    3. 多态:是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    多态

    多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。 如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。

    C++ 中的多态性具体体现在运行和编译两个方面:

    • 运行时多态是动态多态,其具体引用的对象在运行时才能确定。
    • 编译时多态是静态多态,在编译时就可以确定对象使用的形式。

    多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

    多态的作用

    主要是两个:

    1. 隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;
    2. 接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

    虚函数表

    对 C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。 简称为 V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。 这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。

  • define vs const

    Introduction

    This article describes the differences between define and const in both C and C++ programming languages.

  • Linux 动态共享库开发

    Table of Contents

    1 简单的so实例

    源文件

  • 用Bochs调试操作系统

    如果单是需要一个虚拟机的话,你有许许多多的选择,本书下文也会对其他虚拟机有所介绍,之所以Bochs称为我们的首选,最重要的还在于它的调试功能。

  • Bochs

    A virtual machine is an indirection engine which redirects code and data inside of the ‘guest’ sandbox

    Three ways of VM implementation

    1. Virtualization, direct execution (VMware, Virtual PC, Xen)
    2. Dynamic (just-in-time) translation (QEMU)
    3. Emulation (Bochs, Gemulator)

    对一台安装了Windows NT 系列操作系统的PC来说,按下电源开关之后,CPU中首
    先开始运行的是Bios,然后是MBR,接着是引导扇,然后就是NTLDR。 [bochs]:
    [bochs]:
    [bochs]: