日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++多态--2(计算器,纯虚函数和抽象类)

發(fā)布時間:2023/11/30 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++多态--2(计算器,纯虚函数和抽象类) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么要用多態(tài)

  • 早期方法不利于擴展
  • 開閉原則 開閉原則 對擴展開放 對修改關閉
  • 利用多態(tài)實現—利于后期擴展,結構性非常好,可讀性高,效率稍微低,發(fā)生多態(tài)內部結構復雜
  • 多態(tài)成立的條件

  • 又繼承

  • 子類重寫父類虛函數的函數:

    a)返回值,函數名字,函數參數,必須和父類完全一致(析構函數除外)
    b)子類中virtual關鍵字可寫可不寫,建議寫

  • 類型兼容 父類指針,父類引用,指向子類對象

  • 抽象基類和純虛函數

  • 在設計時,常常希望基類僅僅作為其派生類的一個接口,這就是說,僅想對基類進行向上類型轉換,使用它的接口,
    而不希望用戶實際的創(chuàng)建一個基類的對象,同時創(chuàng)建一個純虛函數允許接口中放置成員原函數,而不是要提供一段可能對這個函數毫無意義的代碼。

  • 做到這點,可以在基類中加入至少一個純虛函數(pure virtual function),使得基類稱為抽象類(abstract class)

  • 純虛函數使用關鍵字virtual,并在其后面加上=0,如果試圖去實例化一個抽象類,編譯器則會阻止這種操作。

  • 當繼承一個抽象類的時候,必須實現所有的純虛函數,否則由抽象類派生的類也是一個抽象類

  • Virtual void fun()=0;告訴編譯器在vtable中為函數保留一個位置,但在這個特定位置不放地址

  • 建立公共接口目的是為了將子類公共的操作抽象出來,可以通過一個公共接口來操縱一組類,且這個公共接口不需要事先(或者不需要完全實現)。可以創(chuàng)建一個公共類

    #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; } *///真正的開發(fā)中,有個開發(fā)原則,開閉原則 //對擴展開放 對修改關閉//利用多態(tài)實現計算器 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; }
  • 純虛函數寫法 virtual void func()=0;
  • 抽象類型
  • 抽象類 不可實例化對象
  • 如果類 繼承了抽象類,必須重寫抽象類中的純虛函數
  • 總結

    以上是生活随笔為你收集整理的c++多态--2(计算器,纯虚函数和抽象类)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。