C++五:重载 多态

C++五:重载与多态

一:概述

  多态是指同样的消息被不同类型的对象接收导致不同的行为,即接口的多种不同的实现方式。多态可分为静态多态与动态多态。多态类型可分为四类:重载多态,强制多态,包含多态,参数多态。

二:实现

1.重载多态(运算符重载)

  运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据是有不同的行为。其实质就是函数重载。运算符重载可分为重载为类的非静态成员函数与重载为非成员函数。

1.1 重载为类的非静态成员函数

  使用关键字operator 运算符,即可根据你给出的标志符,自动选择对应的函数。
例如;

#include <iostream>
using namespace std;
class Complex //复数类定义
{
public: // 外部接口
    Complex(double r = 0.0, double i = 0.0) :real(r), imag(i) {}
    Complex operator+(const Complex &c2)const;//定义一个+的重载函数
    Complex operator-(const Complex &c2)const;//定义一个-的重载函数
    void display()const;
private:
    double real;
    double imag;

};
Complex Complex::operator+(const Complex &c2)const {
    return Complex(real + c2.real, imag + c2.imag);//返回两个值的和
}
Complex Complex::operator-(const Complex &c2)const {
    return Complex(real - c2.real, imag - c2.imag);//返回两个值的差
}
void Complex::display()const {
    cout << "(" << real << "," << imag << ")" << endl;
}
int main() {
    Complex c1(5, 4), c2(2, 10), c3;
    cout << "c1=";
    c1.display();
    cout << "c2=";
    c2.display();
    c3 = c1 + c2;
    cout << "c3=c1+c2=";
    c3.display();
    c3 = c1 - c2;
    cout << "c3=c1-c2=";
    c3.display();
    return 0;
}

运行结果为:
1
可以看到,在main函数中,c3根据c1与c2的不同操作,自动选择了对应的函数。

1.2 重载为非成员函数

  将运算符重载为类的非成员函数,就必须把操作数全部通过形参的方式传递给运算符重载函数。
例如:
1

2.虚函数

  虚函数是动态绑定的基础。虚函数必须是非静态的成员函数。虚函数必须用virtual关键字特别声明。派生类的函数和基类的虚函数一样时,派生类中的函数也会被默认为虚函数。
1

2.1虚析构函数

  在c++中,虚构函数可以通过基类指针删除派生类对象,而不能声明虚构造函数,但是可以生成虚析构函数,只需声明为

virtual ~类名();

例如:
1

猜你喜欢

转载自www.cnblogs.com/Drac/p/11747712.html
今日推荐