c++多态--2(计算器,纯虚函数和抽象类)
生活随笔
收集整理的這篇文章主要介紹了
c++多态--2(计算器,纯虚函数和抽象类)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么要用多態
多態成立的條件
又繼承
子類重寫父類虛函數的函數:
a)返回值,函數名字,函數參數,必須和父類完全一致(析構函數除外)
b)子類中virtual關鍵字可寫可不寫,建議寫
類型兼容 父類指針,父類引用,指向子類對象
抽象基類和純虛函數
在設計時,常常希望基類僅僅作為其派生類的一個接口,這就是說,僅想對基類進行向上類型轉換,使用它的接口,
而不希望用戶實際的創建一個基類的對象,同時創建一個純虛函數允許接口中放置成員原函數,而不是要提供一段可能對這個函數毫無意義的代碼。
做到這點,可以在基類中加入至少一個純虛函數(pure virtual function),使得基類稱為抽象類(abstract class)
純虛函數使用關鍵字virtual,并在其后面加上=0,如果試圖去實例化一個抽象類,編譯器則會阻止這種操作。
當繼承一個抽象類的時候,必須實現所有的純虛函數,否則由抽象類派生的類也是一個抽象類
Virtual void fun()=0;告訴編譯器在vtable中為函數保留一個位置,但在這個特定位置不放地址
建立公共接口目的是為了將子類公共的操作抽象出來,可以通過一個公共接口來操縱一組類,且這個公共接口不需要事先(或者不需要完全實現)??梢詣摻ㄒ粋€公共類
#include<iostream>using namespace std; /* class Calculator { public:void setv1(int v){this->val1 = v;}void setv2(int v){this->val2 = v;}int getResult(string oper){if (oper == "+"){return val1 + val2;}else if (oper == "-"){return val1 - val2;}}private:int val1;int val2; }; void test01() {Calculator cal;cal.setv1(10);cal.setv2(10);cout << cal.getResult("+") << endl;cout << cal.getResult("-") << endl; } *///真正的開發中,有個開發原則,開閉原則 //對擴展開放 對修改關閉//利用多態實現計算器 class abstractCalculator { public:void setv1(int v){this->val1 = v;}void setv2(int v){this->val2 = v;}//virtual int getResult(){return 0;} 虛函數//純虛函數//如果父類中有了純虛函數 子類繼承了父類,必須要實現純虛函數//如果父類中 有了純虛函數,這個父類,就無法實例化對象了//這個類中有了純虛函數,通常又稱為 抽象類virtual int getResult() = 0;public:int val1;int val2; }; //如果父類中有了純虛函數 子類繼承了父類,必須要實現純虛函數 class A :public abstractCalculator { public:virtual int getResult(){//return 0;}};//加法計算器 class PlusCaculator :public abstractCalculator { public:virtual int getResult(){return val1 + val2;} }; //減法計算器 class SubCalculator : public abstractCalculator { public:virtual int getResult(){return val1 - val2;} };//乘法計算器 class ChengCalculator : public abstractCalculator { public:virtual int getResult(){return val1*val2;} };void test01() {abstractCalculator *abc = new PlusCaculator;//加法計算器abc = new PlusCaculator;abc->setv1(10);abc->setv2(20);cout << abc->getResult() << endl;delete abc;abc = new SubCalculator;abc->setv1(10);abc->setv2(20);cout << abc->getResult() << endl;delete abc;abc = new ChengCalculator;abc->setv1(10);abc->setv2(20);cout << abc->getResult() << endl;//如果父類有了純虛函數,不能實例化對象了/*abstractCalculator aaa;abstractCalculator *abc = new abstractCalculator;*/ }int main() {test01();system("pause");return 0; }總結
以上是生活随笔為你收集整理的c++多态--2(计算器,纯虚函数和抽象类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DOMContentLoaded会影响预
- 下一篇: c++中多态---3(虚析构和纯虚析构,