重載與多態ios
重載c++
C++容許在同一範圍中聲明幾個功能相似的同名函數,可是這些同名函數的形參(指參數的個數、類型或者順序)必須不一樣,也就是說用同一個函數完成不一樣的功能。這就是重載函數。重載函數經常使用來實現功能相似而所處理的數據類型不一樣的問題。不能只有函數返回值類型不一樣。函數
重載格式,舉例:this
void show() { cout<<"c++"<<endl; } void show(int a) { cout<<"the anwser is"<<a<<endl; }
如以上對於傳遞參數的不一樣會自動調用適合的函數來使用。返回值也可以用來區分重載函數,可是不能只有返回值的類型不一樣。spa
運算符重載code
重定義或重載大部分 C++ 內置的運算符,以此來使用自定義類型的運算符。對象
重載的運算符是帶有特殊名稱的函數,函數名是由關鍵字 operator 和其後要重載的運算符符號構成的。與其餘函數同樣,重載運算符有一個返回類型和一個參數列表。blog
格式舉例:繼承
返回值類型 operator運算符(形參)
io
以下所示代碼:
#include <iostream> using namespace std; class point { private: int x; int y; public: point(int a = 1, int b = 1) { x = a; y = b; } point operator++() { this->x++; this->y++; } point operator++(int) { point c; c.x = this->x++; c.y = this->y++; return c; } point operator--() { this->x--; this->y--; } point operator--(int) { point c; c.x = this->x--; c.y = this->y--; return c; } void show() { cout << x << " " << y<<endl; } }; int main() { point a(2,2), b, c; c = a++; a.show(); c.show(); }
其中對於後置的運算符必須在定義時在形參中加入int,但此時int不會定義任何變量因此不算是做爲參數。
多態
多態按字面的意思就是多種形態。當類之間存在層次結構,而且類之間是經過繼承關聯時,就會用到多態。
C++ 多態意味着調用成員函數時,會根據調用函數的對象的類型來執行不一樣的函數。
經過virtual來定義虛函數
代碼示例
class point { private: int x; int y; public: virtual void show() { cout<<"c++"<<endl; } }
若是show函數中無內容則稱該函數爲純虛函數,其函數體有其繼承類定義。而具備純虛函數的類被稱爲抽象類,其中抽象類沒法實例化即形如point a的定義是錯誤的。