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 ~类名();

例如:

最新文章

  1. video.js播放mp4文件
  2. python tkinter
  3. ValidateAntiForgeryToken 防止CSRF(跨网站请求伪造)
  4. 图片上传本地预览。兼容IE7+
  5. CF198 D2
  6. sql常识-BETWEEN 操作符
  7. Chi Square Distance
  8. Closure Compiler(封闭编辑器), Closure Inspector, Closure Templates, 封闭图书馆(Closure Library) Google- 摘自网络
  9. 多线程下的performSelector和NSThread的使用
  10. wordpress显示多个分类的文章
  11. WPF异步载入图片,附带载入中动画
  12. vbs 解析html文档的方法
  13. Spring boot集成swagger2
  14. Windows7下安装pyspark
  15. nodeJS之crypto模块md5和Hmac加密
  16. cygwin 安装 apt-cyg
  17. office2007每次打开都要配置文件,怎么取消配置(可行)
  18. Tomcat配置虚拟主机、tomcat的日志
  19. Python实现机器学习算法:逻辑回归
  20. 用到的设计模式总结--单例模式+工厂方法模式+Builder模式

热门文章

  1. 跟我一起做一个vue的小项目(APPvue2.5完结篇)
  2. mysql 导入txt数据
  3. 学习Boost/Asio
  4. Robbin负载均衡
  5. python 数据文件操作——读入数据
  6. Lua报unexpected symbol near错误
  7. linux源码安装
  8. C++ fstream文件操作
  9. 使用 javascript 替换 jQuery
  10. 2019-1-17-一段能让-VisualStudio-炸掉的代码