C++面向对象编程:友元函数与多态性解析

需积分: 10 1 下载量 126 浏览量 更新于2024-08-19 收藏 684KB PPT 举报
"这篇资料主要涉及C++面向对象程序设计中的友元函数和多态性的概念,通过具体的代码示例来讲解如何重载运算符以及如何利用虚函数实现多态。" 在C++中,面向对象编程的一个重要特性是多态性。多态性允许不同类型的对象对同一消息作出不同的响应,从而实现“一个接口,多种方法”的设计理念。多态的实现通常包括函数重载、运算符重载和虚函数。 函数重载是通过改变函数的参数列表来实现的,即使函数名相同,只要参数数量或类型不同,就能定义多个同名函数。例如,在给定的描述中,`point`类有一个`area()`函数,返回0.0,而它的派生类`rectangle`的`area()`函数则返回矩形的面积,即`w*h`。这里,`area()`函数就被重载了,根据传入的对象类型,调用相应版本的函数。 运算符重载是C++中的特殊形式,它使得我们可以为自定义数据类型赋予标准运算符的行为。在提供的例子中,`complex`类重载了加法`operator+`和减法`operator-`,使复数类的对象可以进行加减运算。重载运算符通常需要定义为友元函数,因为它们通常需要访问类的私有或保护成员。在`complex`类的定义中,可以看到四个运算符重载函数声明为友元,以便能够访问类的私有成员`real`和`imag`。 友元函数不是类的成员,但被授予访问类私有和保护成员的权限。在这个例子中,友元函数`operator+`和`operator-`接收两个`complex`对象作为参数,然后进行相应的复数运算。这样的设计使得我们可以像操作基本数据类型一样方便地操作自定义类型。 接下来讨论虚函数,虚函数是实现动态绑定的关键。当基类指针或引用指向派生类对象,并通过基类调用成员函数时,如果该函数是虚函数,那么实际调用的是派生类中的版本,而非基类的版本。在`ObjectOriented`部分,提到了虚函数的使用,通过在函数声明前加上`virtual`关键字,可以创建虚函数。这样,即使在不知道对象具体类型的情况下,也能正确调用相应的函数实现。 纯虚函数和抽象类是实现多态的另一种方式。纯虚函数没有函数体,仅声明函数签名,定义了一个接口,但不提供具体实现。含有纯虚函数的类被称为抽象类,不能直接实例化,只能作为派生类的基类使用。抽象类提供了一个框架,派生类必须实现这些纯虚函数,从而确保所有派生类都有统一的接口。 总结来说,这个资料深入探讨了C++面向对象编程中的多态性,包括通过函数重载、运算符重载和虚函数来实现多态的方式。同时,也提到了友元函数在实现运算符重载中的作用,以及抽象类和纯虚函数在定义接口和强制派生类实现特定行为上的应用。这些知识对于理解和编写面向对象的C++代码至关重要。