1.說在前面: 項目大體上解決了,現在可以騰出時間來優化項目和學習新的知識 2.C++多態性 1.簡述:(多態)polymorphism 對於C++的多態性,這是一項很靈活的技術,用法十分靈巧,有難度;簡單來說:多態性就是適當的使用介面函數,通過一個介面來使用多種方法,(相當於上級說一個命令,A,B ...
1.說在前面:
項目大體上解決了,現在可以騰出時間來優化項目和學習新的知識
2.C++多態性
1.簡述:(多態)polymorphism
對於C++的多態性,這是一項很靈活的技術,用法十分靈巧,有難度;簡單來說:多態性就是適當的使用介面函數,通過一個介面來使用多種方法,(相當於上級說一個命令,A,B,C,D等人都做出反應,一個命令,多個反應;
2.怎樣實現多態性
1.採用虛函數和指針來實現多態性
通過虛函數來定義要實現的方法,通過基類的指針指向不同的子類的虛函數方法
2.多態性的優點是實現介面的重用
3.虛函數:
1.虛函數採用關鍵字virtual修飾,虛函數允許子類重新去定義成員函數;
2.重寫(函數名一致,但是內容不一致)//又稱覆蓋(override)
3.重載(函數名一致,但是參數表列不一致)
4.多態性一般就是通過對虛函數進行重寫,然後用基類指針指向不同的子對象,調用不同的虛函數
4.代碼實現
[cpp] view plain copy- #include<iostream>
- #include<stdlib.h>
- #include<string>
- using namespace std;
- class Ishape
- {
- public:
- //多態性實現需要虛方法
- virtual double get_Area() = 0;
- virtual string get_Name() = 0;
- };
- //定義類1 CCircle
- class CCircle :public Ishape
- {
- //聲明的時候需要帶上Virtual關鍵字 顯示多態性
- public:
- CCircle(double radius) {this->c_radius = radius;}
- CCircle(){}
- virtual double get_Area();
- virtual string get_Name();
- private:
- double c_radius;//定義圓的半徑
- };
- //定義方法
- double CCircle::get_Area()
- {
- return 3.14*c_radius*c_radius;
- }
- string CCircle::get_Name()
- {
- return "CCircle";
- }
- class CRect :public Ishape
- {
- public:
- CRect(double length, double width) { this->m_length = length, this->m_width = width;}
- CRect(){};
- virtual double get_Area();
- virtual string get_Name();
- private:
- double m_length;
- double m_width;
- };
- double CRect::get_Area()
- {
- return m_length*m_width;
- }
- string CRect::get_Name()
- {
- return "Rectangle";
- }
- //通過指針指向不同的類從而使用不同的方法
- #include"text.h"
- void main()
- {
- <span style="white-space:pre;"> </span>Ishape *point = NULL;//建立指針
- <span style="white-space:pre;"> </span>point = new CCircle(10);
- <span style="white-space:pre;"> </span>//圓類
- <span style="white-space:pre;"> </span>cout << point->get_Name() << "的面積是:" << point->get_Area() << endl;
- <span style="white-space:pre;"> </span>delete point;
- <span style="white-space:pre;"> </span>//矩形類
- <span style="white-space:pre;"> </span>point = new CRect(10, 20);
- <span style="white-space:pre;"> </span>cout << point->get_Name() << "的面積是:" << point->get_Area() << endl;
- <span style="white-space:pre;"> </span>delete point;
- <span style="white-space:pre;"> </span>system("pause");
- }
- <span style="white-space:pre;"> </span>
- <span style="white-space:pre;"> </span>
- <span style="white-space:pre;"> </span>
- <span style="white-space:pre;"> </span>