您的位置:首页 > 编程语言 > C语言/C++

C++初学者指南 第十篇(9)

2010-10-19 16:52 176 查看
转载请标明出处:http://blog.csdn.net/zhangxingping

必备技能10.8:指向派生类对象的指针

在继续讨论虚函数和多态性之前,我们有必要讨论一下关于指针的一个重要方面。指向派生类(对象)的指针和指向基类(对象)的指针不像其它类型的指针那样没有什么关系,而是有关系的。通常来讲,一个类型的指针是不能指向另外一种类型的对象的。然而,基类指针和派生类对象则是个例外。在C++中,一个基类的指针是可以指向任何继承了该类的派生类的对象的。例如,有类B和D,其中D是从B继承而来的。那么任何B类型的指针都是可以用来指向D类型的对象的。因此,下面的代码段是有效的:
B *p; //B类型的指针
B B_ob; //B类的对象
D D_ob; // D类的对象

p = &B_ob; //p指向B类的对象
p = &D_ob; //p 指向D类的对象,而D类继承了B类
基类的指针如果指向的是派生类的对象,那么通过该指针则只能访问该对性从基类中继承的那部分。因此,针对上面的例子,我们可以通过p指针来访问D_ob对象从B类中继承的那部分,而不能通过p访问到D类对象特有的那部分。

还有一点需要注意:尽管基类的指针是可以指向派生类的对象的;但是反之则不行。也就是说,不能通过派生类的指针来访问基类的对象。

我们都知道,指针的加法和减法都是和它的基本类型相关的。因此,当一个基类的指针指向一个派生类的对象的时候,该指针自加或者自减后就不是指向下一个或者前一个派生类的对象了,而是指向的是下一个或者前一个基类的对象。所以,我们可以认为,当基类的指针指向派生类对象的时候,对其进行增加或者减小都是错误的做法。

基类指针可以指向任意的它的派生类的对象,这一点非常重要,也是C++中的一个基础点。正如我们将要学校到的,这种灵活性是C++实现运行时多态性的关键。
对派生类型的引用
和前面描述的指针类似,基类的引用可以被用来对一个派生类的对象进行引用。这点经常被用在函数的参数中。基类引用参数可以接收基类对象作为实参,也可以接收任何基类的派生类的对象作为实参。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: