@guochy2012
2014-05-03T14:31:47.000000Z
字数 621
阅读 1266
当谈论起面向对象编程(OOP)的时候,不同的人有不同的含义。有些人认为那些具有用户图形接口的应用程序是面向对象的。有人用这个术语表示进程间通信的一种特定的方式。还有一些人用它来表示“买我的产品”。
在一些偶然的场合下,当我提及OOP的时候,我指的是采用继承和动态绑定的编程方式。 尽管这种方式的编程并非总是灵丹妙药,但是它经常起到一定的作用————尤其是当我们在程序中处理那些看起来类似,但是并不相同的实体的时候。
在面向对象系列的语言里,C++占据了一个独特的地位。大多数语言提供继承和动态绑定机制,与动态类型检查机制结合在一起。因此,这些语言也必须在程序运行的时候查找类的成员函数,以此来决定去调用哪个函数。C++则是需要程序员说明编译时刻哪些类型是相似的,这样能够在编译器间检查那些函数调用的类型,这些函数将在后面被以一种动态的方式去绑定。正如每个C++程序员都应该知道的那样,运行期多态仅在这种情况下发生:当程序通过一个基类对象的指针或者引用来调用一个虚函数时。这种运行期多态的约束是经过深思熟虑的。
这种模型的含义可能不太明显。实际上,对象的创建和拷贝并非运行期多态,这个事实深刻的影响了类的设计。所以,容器————包括内置容器例如数组和结构体,和用户自定义的容器类————仅仅能够容纳一种编译期已知的类型。当我们需要创建、复制、存储那些直到运行期才能确定类型的对象时,这种编译期的检查给这些通过继承相互关联的类的家族带来一个难题。