C++运算符重载:实现复数类的加法

需积分: 18 0 下载量 135 浏览量 更新于2024-08-24 收藏 391KB PPT 举报
"运算符重载是C++中实现多态的一种方式,它允许我们为已有的运算符赋予新的含义,以适应特定类的需求。在本课件中,我们将探讨运算符重载以及多态性在C++中的应用。多态性是面向对象编程的关键特性,增强了代码的灵活性和可扩展性,减少了冗余。多态分为编译时多态和运行时多态,前者通过函数重载和运算符重载实现,后者主要通过虚函数来实现。运算符重载的例子是为复数类定义加法操作,使得两个复数对象可以通过‘+’运算符相加。" 在C++中,运算符重载允许程序员为自定义类型定义运算符的行为。在这个例子中,我们创建了一个名为`complex`的复数类,其中包含实部`real`和虚部`imag`。然而,当我们尝试像普通数值那样使用`+`运算符将两个`complex`对象相加时,编译器会报错,因为默认的`+`运算符并不适用于这个自定义类型。 为了解决这个问题,我们需要重载`+`运算符。运算符重载通常通过定义一个函数(通常是类的成员函数或友元函数)来完成,该函数的名称通常不常见,但在使用时看起来像是调用了运算符。例如,我们可以为`complex`类添加一个成员函数`operator+`,如下所示: ```cpp class complex { public: double real, imag; complex(double r = 0, double i = 0) { real = r; imag = i; } complex operator+(const complex& other) const { return complex(real + other.real, imag + other.imag); } }; ``` 在这个`operator+`函数中,我们接收一个`complex`类型的引用作为参数,然后返回一个新的`complex`对象,其值是两个输入复数的和。现在,我们可以在`main`函数中使用`+`运算符将两个`complex`对象相加,如下: ```cpp int main() { complex com1(1.1, 2.2), com2(3.3, 4.4), total; total = com1 + com2; // ... return 0; } ``` 这个操作将正确地执行复数加法,并将结果赋值给`total`变量。这就是运算符重载如何帮助我们在C++中实现多态性的示例。 多态性分为编译时多态和运行时多态。编译时多态主要是通过函数重载(相同函数名但参数列表不同)和运算符重载实现的,这些行为在编译阶段就已经确定。而运行时多态则是通过虚函数实现的,这种多态性只有在运行时才能确定具体调用哪个函数,这通常涉及到继承和指针或引用来调用对象的方法。 在C++中,虚函数是实现运行时多态的关键。当基类指针或引用指向派生类对象时,通过虚函数调用,可以调用到实际对象的对应函数,而不是基类的函数。这种动态绑定的能力使我们能够编写更加灵活和可扩展的代码,比如设计模式中的工厂模式、策略模式等,都可以利用多态性来实现代码的解耦和复用。