标签:暴力 c++ ase level 一个 类对象 log logs 错误
现在假设一个 B 继承自 A ,因此,B* 可以用作 A*。类似的,一个B&可以用作 A&。但是,一个 A 不一定是一个 B,因此,A*不能用作B*。一般而言,如果一个类Derived有一个公有基类Base,那么我们就可以将一个Derived* 赋予一个Base* 类型的变量而无须显式类型转换。而相反的转换,即从Base* 到Derived* ,必须是显式的。例如:
void g(Manager mm,Employee ee) { Employee* pe = &mm; //正确:每个Manager都是一个Employee Manager* pm = ⅇ //错误:并不是每个Employee都是一个Manager pm->level = 2; //灾难:ee不包括level pm = static_cast<Manager*>(pe); //暴力转换;可奏效,因为pe指向Manager mm pm->level = 2; //没问题:pm指向Manager mm,包含level }
换句话说,若通过指针和引用进行操作,派生类对象可以当做其基类对象处理,反过来则不能。
将一个类用作基类等价于定义一个该类的(无名)对象;因此,类必须定以后才能用作基类。
虚函数
标签:暴力 c++ ase level 一个 类对象 log logs 错误
原文地址:http://www.cnblogs.com/gardenofhu/p/7645097.html