***纯虚拟函数*** 在设计抽象基类时,需要注意以下几点: (1)不要将destructor声明为pure virtual function; 如果将destructor声明为pure virtual function,则设计者一定得定义它。因为每一个derived class destructor会被编译器加以扩展,以静态调用得方式调用其“每一个virtual base class”以及“上一层base class”的destructor. (2)不要将那些函数定义内容并不与类型有关的函数设计为virtual function,因为其几乎不会被后继的derived class改写。 (3)对于其derived class可能修改某一个data member的函数,不应被声明为const. ***“无继承”情况下的对象构造*** 先定义class Point: class Point { 你可不能小看z()这个virtual function给class Point带来的巨大变化。virtual function的引入促使每一个class Point拥有一个vtpr,这样一来,编译器在constructor中添加了对vptr进行初始化的代码,而copy constructor和copy assignment operator也会对vptr进行设定,而不再是原先简单的bitwise操作了。 !--判断阅读权限-->!--判断是否已经扣点--> |
