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