引言:多態性是指一樣的消息被不一樣類型的對象接受時會致使不一樣的行爲。它能夠分爲:重載多態、強制多態、包含多態和參數多態。ios
編譯和運行時均可以產生多態,前者是編譯中肯定同名操做的具體操做對象,後者爲程序運行中動態地肯定操做所針對的具體對象。c++
如在複數類中:函數
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(double r=0.0,double i=0.0):real(r),imag(i){}
void display()const;
private:
double real;
double imag;
};
若在主函數中聲明兩個對象,想實現複數的加法,直接用+是會報錯的,由於系統庫中+並不支持用戶自定義類的運算。這時就須要用到運算符重載:使同一個運算符做用於不一樣類型的數據致使不一樣的行爲this
重載需注意:(1)c++運算符中已有的才能夠重載 (2)重載後優先級與結合性不變 (3)不能改變操做對象個數,至少有一個操做對象是自定義類型spa
Complex operator +(Complex i,Complex j)
{
return i.display()+j.display()
}
而類型強制轉換運算符是單目運算符,也能夠被重載,但只能重載爲成員函數,不能重載爲全局函數。通過適當重載後,(類型名)對象
這個對對象進行強制類型轉換的表達式就等價於對象.operator
code
類型
名()
,即變成對運算符函數的調用。對象
#include <iostream>
using namespace std;
class Complex
{
double real, imag;
public:
Complex(double r = 0, double i = 0) :real(r), imag(i) {};
operator double() { return real; } //重載強制類型轉換運算符 double
};
int main()
{
Complex c(1.2, 3.4);
cout << (double)c << endl; //輸出 1.2
double n = 2 + c; //等價於 double n = 2 + c. operator double()
cout << n; //輸出 3.2
}
自增++
和自減--
都是一元運算符,它的前置形式和後置形式均可以被重載。不過經過形參表中是否有int型進行區分:blog
class Ball{
private:
int radius;
public:
//前自增
Ball& operator++() {
++(this->radius);
return *this;
}
//後自增
Ball& operator++(int) {
Ball ball = *this;
++*this;
return ball;
}
};