基类与派生类之间的转换
C++有时在基类出现的地方需要派生类对象。这时,就需要将派生类对象转换为基类对象。基类与派生类之间的转换要求派生类对基类 公有继承。
1. 赋值
派生类对象可以赋值给基类对象,这时是把派生类对象中从对应基类 继承来的成员赋值给基类对象。 不允许将基类对象赋值给派生类对象(编译时报错,因为派生类的新成员无值可赋)。例如:
- Circle c(2);
- Cylinder d(1.5,10);
- c=d;
2. 指针
可以将一个派生类对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的成员,不 能访问派生类中的新成员。例如:
- Circle *pc;
- Cylinder d(1.5,10);
- pc=&d;
3. 引用
派生类对象可以初始化基类对象的引用。但这个别名 只能访问派生类对象中由基类继承来的成员。
- Cylinder d(1.5,10);
- Circle &rc=d;
4. 联编(绑定)
指计算机程序自身彼此关联的过程,也就是 把一个标识符名与一个存储地址联系在一起的过程;用oop术语讲,就是 把一条消息和一个对象的方法相结合的过程。按照联编进行的阶段的不同,分为静态联编和动态联编。静态联编(静态绑定):在编译阶段就已经根据指针变量或引用的类型决定到底调用哪个同名的函数,与其指向的或引用的对象的类型无关。