Archive for ‘边走编程’ Category

May 22, 2009

该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:

  • 用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。
  • 用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
  • 把空指针转换成目标类型的空指针。
  • 把任何类型的表达式转换成void类型。
Tags: ,. 31 views
May 21, 2009

变量作用域

1
2
3
4
5
6
7
8
9
int x = 5;
int f() 
{
   int x = 3;       //此x在f作用域中将覆盖全局的x
   {
       extern int x;   //通过extern关键词引入文件作用域的x
       return x;        //于是此作用域内的想是全局的x
   }
}

指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int foo();
 
int (*p)() = &foo;
cout<<p();
 
p = foo;
cout<<p();
 
p = *f;
cout<<*p)();
 
p = *******foo;
cout<<p();
//上述代码,每一对对指针的赋值和调用都是等价的
Tags: ,. 32 views
May 18, 2009

题目描述:

Felicia的LCD当然与众不同,她的显示器是有许多许多坏点的,此外,
她的显示器只能显示两种颜色(黑和白,分别对应亮与暗),显示器中任意相邻的点不能同时亮,
一次你遇到漂亮的Felicia,你被迷倒了,于是你想帮助她换一台新的LCD,
但她却考你能算出她的LCD一共能够显示出多少种不同的图案,
智慧的你能不能完成这个任务呢?

Tags: . 7 views
May 17, 2009

前言

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。

关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。

当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。

言归正传,让我们一起进入虚函数的世界。

Tags: . 45 views
May 14, 2009

关联式容器associative container:

被插入的元素并没有一个固定的位置。这不仅是指操作者可能更改其中元素的位置,还有可能——每当新插入一个元素时,容器都会自动的按照某种排序规则将新来的元素放置在合适的位置。也即,这种容器内元素的排列顺序由容器自己的排序规则决定,操作者无能为力。

Tags: ,,. 339 views
May 13, 2009

经常有人要我(Bjarne Stroustrup)推荐一种C++的编译器。但是,我通常不会推荐任何编译器,因为我可能因此而在编译器的商战中表明”立场”。而且我并不是对所有的编译器都了解,C++编译器实在是太多了,我平时会用到半打(6个)C++ 编译器,但那只是”沧海一粟”罢了。
我希望人们在选择自己的编译器时,一定要严格参照现行的C++标准。尽量避免使用不支持或者违背ISO标准的编译器。
你如果是一个初学者而且不知道如何测验一个编译器是否符合标准的话,你可以试试下面这个小程序:

Tags: ,,. 152 views

B树
即二叉搜索树:

  • 所有非叶子结点至多拥有两个儿子(Left和Right);
  • 所有结点存储一个关键字;
  • 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
Tags: . 129 views
May 12, 2009

这是一个简单地模拟shell解释执行用户命令的小程序,它从标准输入读入命令,建立子进程,在子进程内执行命令,待子进程返回(例如,cp,mv,grep等)后继续等待用户输入,也可以不等待子进程(例如,后台运行的命令cp&等).

Tags: . 59 views

数组和指针之间存在如下等价关系:

  • 一维数组等价于元素的指针:int a[20] <==> int *const a;
  • 二维数组等价于指向一维数组的指针,int b[3][4] <==> int(*const b) [4];
  • 三维数组等价于指向二维数组的指针,int c[2][3][4] <==> int (*const c) [3][4];

其他多维数组与二、三维相似,不再赘述。

Tags: . 15 views

有如下规则:

非静态数据成员被放在每一个对象体内作为对象专有的数据成员

静态数据成员被提取出来放在程序的静态数据区内,为该类所有对象共享,因此只存在一份。

静态和非静态成员函数最终都被提取出来放在程序的代码段中并为该类所有对象共享,因此每一个成员函数也只能存在一份代码实体。

因此,构成对象本身的只有数据,任何成员函数都不隶属于任何一个对象,非静态成员函数与对象的关系就是绑定,绑定的中介就是this指针。

成员函数为该类所有对象共享,不仅是处于简化语言实现、节省存储的目的,而且是为了使同类对象有一致的行为。同类对象的行为虽然一致,但是操作不同的数据成员。

Tags: . 47 views