码迷,mamicode.com
首页 > 编程语言 > 详细

C++五:重载 多态

时间:2019-10-27 16:17:38      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:https   double   virt   重载   关键字   多重   含义   block   com   

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;
}

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

1.2 重载为非成员函数

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

2.虚函数

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

2.1虚析构函数

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

virtual ~类名();

例如:
技术图片

C++五:重载 多态

标签:https   double   virt   重载   关键字   多重   含义   block   com   

原文地址:https://www.cnblogs.com/Drac/p/11747712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!