C++继承与多态:子类作为父类对象的使用

需积分: 45 61 下载量 14 浏览量 更新于2024-08-08 收藏 3.88MB PDF 举报
"C++编程中的继承与类型兼容性原则,以及C++中C语言的扩展" 在C++中,继承是一种强大的机制,它允许我们创建一个新类(派生类)来扩展或修改已存在的类(基类)。在标题和描述中提到的“继承中的构造和析构”,主要涉及的是在类层次结构中如何处理对象的创建(构造)和销毁(析构)。 3.3.1 类型兼容性原则 这个原则指出,公有派生类的对象可以在需要基类对象的地方使用,这意味着基类和派生类之间存在一种类型的兼容性。这种兼容性体现在以下几个方面: 1. 子类对象可以当作父类对象使用。这意味着你可以将一个子类对象赋值给一个父类类型的变量,或者用子类对象初始化一个父类类型的变量。 2. 子类对象可以直接赋值给父类对象,这通常涉及到隐式类型转换。 3. 父类指针可以直接指向子类对象,这是多态性的基础,因为可以透过父类指针调用子类覆盖或新增的成员函数。 4. 父类引用可以直接引用子类对象,这与父类指针的情况类似,也是多态性的一个体现。 类型兼容规则是实现多态性的重要基础,它使得我们能够设计出更加灵活和可扩展的代码。例如,在基类指针或引用上调用虚函数时,实际执行的函数取决于指针或引用所指向的对象的实际类型,这就是运行时多态。 在提供的代码示例中,`Parent03` 类具有一个 `print` 函数,虽然没有显示,但可以假设它是一个虚函数。如果 `Parent03` 是一个基类,并且有一个派生类 `Child03` 覆盖了 `print` 函数,那么通过父类指针或引用调用 `print` 就会执行 `Child03` 的版本,这就是多态性的应用。 此外,C++还扩展了C语言,提供了面向对象的编程特性。在提供的代码中展示了两种编写求圆周长和面积的方法: 方法1是传统的C风格,使用函数和结构体来处理数据。这种方法是过程导向的,数据和操作数据的函数是分离的。 方法2是C++的面向对象方式,通过定义一个 `Circle` 类来封装数据(半径)和操作(设置半径、计算周长和面积)。类的成员函数提供了封装和数据抽象,使得代码更易读,更具模块化。 在C++中,类不仅可以包含数据成员,还可以包含成员函数,这些函数可以访问和修改类的私有和保护成员。`Set_Radius` 和 `Get_Radius` 是访问和设置半径的例子,而 `Get_Girth` 和 `Get_Area` 则是计算圆的周长和面积。这种面向对象的编程方式提供了更好的代码组织和数据安全性。 C++的继承和类型兼容性原则增强了代码的复用性和灵活性,而面向对象的特性则使得代码更易于管理和维护。