在一个类层次中,如果最顶层基类需要定义某个属性,最一般的方法就是在顶层的类中定义
一个数据成员来存储该属性的值,然后在顶层基类中定义一个非虚方法访问该属性的值。
但是如果对象的数量非常多时,这种方式会造成一定的内存开销。
有一种特殊的情况:一个对象的某个属性的值完全由其所属的类决定。在这种情况下,可以
在顶层基类定义一个虚方法,然后在某些子类中覆盖该方法。在这些虚方法中都根据所在
的类返回相应的常值。
例如在WebKit的DOM类层次中,有Node,ContainerNode,Element,Document等各种类,Node类有一个属性,
即该Node对象是否是Element。这时可以在Node中定义一个返回false的virtual method,
然后在Element中override该方法,并返回true。
这种方法的缺点是访问速度慢,无法内联。不过如果这个属性的访问次数很少,该方法还是很有价值的。