15.2.3
1:关于基类的static type和dynamic type(我:这应该就是dynamic binding实现的方法)
首先,基本概念是,这里的static type与声明一个变量是static是两件不同的事。
进一步。如果一个expression(主要指base class)is neither a reference nor a pointer,那么就不存在dynamic binding的机会,因为它的static type和dynamic type总是一样的。(例如,在一个使用Quote基类的地方就只能使用Quote类,不能使用它的继承类;但是,在一个使用Quote&的地方,可以使用Quote的继承类)
最后。一个reference或pointer的expression,它的static type是明确的,但是它的dynamic type是与传入的类型的参数一致的(但传入的参数须是基类的继承类)。
(如一个Quote&的参数,它的static type是Quote&。
如果传入的参数是Quote object,其dynamic type还是Quote&,此时static type和dynamic type一致;
但是如果传入的参数是Bulk_quote的object,那么这个参数的dynamic type就与static type不一样了)
2.(the C++ programming language的摘抄)
12.2.6节:概念
1)在虚函数的第一个声明所在的类里,“必须”要提供定义(除非它被声明为纯虚函数);
2)关键字virtual就像指明一个界面,既要服务本类中的这个函数,也要服务由它派生出类里对应的函数;
3)Employee派生类的对象也应看做Employee的对象
4)用好虚函数,即使在没有考虑到后面会派生出什么类的时候也可以在user-code里使用虚函数(后面不用改变user-code),这是类机制中最关键的一个方面 ==》 只要用得好,就成为了面向对象程序设计的基石,并能够为一个不断演化的程序提供一个方面的稳定性。
5)要在C++中取得多态性的行为,有两个方面:调用的函数就必须是虚函数;而对象必须是通过指针或引用去操作的
6)抽象类