Articles
-
rsync
by oxnz
Table of Contents
-
size_type, size_t, different_type and ptrdiff_t
by oxnz
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
by oxnz
GDB
Linux中包含有一个很有用的调试工具 gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。
和所有常用的调试工具一样,gdb提供了以下功能:
- 监视程序中变量的值
- 在程序中设置断点
- 程序的单步执行
-
C/C++ Basics
by oxnz
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
面向对象
面向对象的三个基本特征
- 封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)
- 继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式。
- 多态:是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
多态
多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。 如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。
C++ 中的多态性具体体现在运行和编译两个方面:
- 运行时多态是动态多态,其具体引用的对象在运行时才能确定。
- 编译时多态是静态多态,在编译时就可以确定对象使用的形式。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
多态的作用
主要是两个:
- 隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;
- 接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。
虚函数表
对 C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。 简称为 V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。 这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。
-
define vs const
by oxnz
Introduction
This article describes the differences between
define
andconst
in both C and C++ programming languages. -
Linux 动态共享库开发
by oxnz
Table of Contents
1 简单的so实例
源文件
-
用Bochs调试操作系统
by oxnz
如果单是需要一个虚拟机的话,你有许许多多的选择,本书下文也会对其他虚拟机有所介绍,之所以Bochs称为我们的首选,最重要的还在于它的调试功能。
-
Bochs
by oxnz
A virtual machine is an indirection engine which redirects code and data inside of the ‘guest’ sandbox
Three ways of VM implementation
- Virtualization, direct execution (VMware, Virtual PC, Xen)
- Dynamic (just-in-time) translation (QEMU)
- Emulation (Bochs, Gemulator)
对一台安装了Windows NT 系列操作系统的PC来说,按下电源开关之后,CPU中首
先开始运行的是Bios,然后是MBR,接着是引导扇,然后就是NTLDR。 [bochs]:
[bochs]:
[bochs]: