C++中派生类对象初始化基类引用详解

需积分: 0 0 下载量 130 浏览量 更新于2024-08-19 收藏 8.66MB PPT 举报
在C++程序设计中,一个重要的知识点是关于派生类对象与基类引用的交互。派生类是面向对象编程中的一个重要概念,它允许创建一个类(Derive)继承自另一个已存在的类(Base)。在C++中,我们经常看到这样的代码片段: ```cpp Derive d; // 派生类对象实例化 Base basei = &d; // 基类引用初始化为派生类对象的地址 // 基类对象与派生类对象的区别 Base b; // 基类对象实例化 Derive d; // 另一个派生类对象实例化 // 别名basei,它只能引用从基类继承来的成员 ``` 基类引用`basei`实际上是一个指向派生类对象`d`的指针,这使得我们可以通过`basei`访问`d`的基类属性和方法。然而,它并不包含派生类特有的成员,只限于基类的接口。这意味着如果派生类新增或重写了基类的方法,`basei`将不会捕获这些变化。 C++语言,尤其是C++++,是C语言的扩展和增强版本,它汲取了C语言的优点,如结构化编程、灵活性、高效性和可移植性,同时增加了面向对象特性,如继承和多态。C++支持类与类之间的继承关系,允许子类(派生类)继承父类(基类)的属性和行为,从而实现了代码复用和模块化。 C++的主要特点包括: 1. 结构化:C++鼓励使用结构化的编程方式,使代码组织清晰,适合大型系统开发和小型控制程序。 2. 高级与低级特性结合:C++既具备高级语言的抽象性,又有类似汇编语言的底层控制,提供了丰富的运算符和数据结构。 3. 高移植性:C++编写的程序能够在多种计算机平台上运行,只需做少量调整。 4. 自由度与挑战:尽管语法结构相对宽松,但这对编程者的经验和理解有较高要求,初学者可能需要更多实践才能熟练掌握调试。 在学习C++时,理解派生类和基类引用的交互以及C++语言的特点至关重要,这有助于提高程序的可维护性和性能优化能力。

题2】定义一个基类Shape,有成员函数:calArea(),但什么都不做,返回0。在此基础上公有派生出Rectangle(矩形)类和Circle类,添加相应的数据成员(成员均为double型),重新定义calArea()计算对象的面积。 主函数中,分别定义一个Rectangle和Circle类对象,初始值由键盘输入。(1)通过对象调用相应的calArea(),输出结果;(2)定义Shape类对象指针,分别赋以Rectangle和Circle类的对象地址,通过指针调用calArea(),输出结果;(3)定义Shape类对象引用r,以Rectangle和Circle类的对象初始化r,通过引用r调用calArea(),输出结果。 PI取值:3.1415926 3 6 3 通过Rectangle类对象调用calArea():18 通过Circle类对象调用calArea():28.2743 基类指针指向Rectangle类对象,调用calArea():0 基类指针指向Circle类对象,调用calArea():0 Rectangle类对象初始化基类对象引用r,r调用calArea():0 Circle类对象初始化基类对象引用r,r调用calArea():0 2 5 2 通过Rectangle类对象调用calArea():10 通过Circle类对象调用calArea():12.5664 基类指针指向Rectangle类对象,调用calArea():0 基类指针指向Circle类对象,调用calArea():0 Rectangle类对象初始化基类对象引用r,r调用calArea():0 Circle类对象初始化基类对象引用r,r调用calArea():0 1 5 4 通过Rectangle类对象调用calArea():5 通过Circle类对象调用calArea():50.2655 基类指针指向Rectangle类对象,调用calArea():0 基类指针指向Circle类对象,调用calArea():0 Rectangle类对象初始化基类对象引用r,r调用calArea():0 Circle类对象初始化基类对象引用r,r调用calArea():0

2023-05-24 上传