C++抽象設計目的
一、純虛擬函式定義
1.純虛擬函式是在基類中宣告的虛擬函式,首先最起碼是在基類中的虛擬函式
2.純虛擬函式在基類中是沒有定義的,這裡指基類,但任何子類中都要定義該純虛擬函式的實現方法
3.在基類中實現純虛擬函式的方法是虛擬函式原型後加“=0”,例如:
virtual void function()=0;
為什麼要引入純虛擬函式?
1.因為當你頂級基類A有一虛擬函式play();,而A的子類B也有play();,A的子類C也有play();,這就說明如果頂級基類A中的play();若定義怎麼玩是不合理的。因為B有B的玩法C有C的玩法。所以這種情況下定義為純虛擬函式目的在於使子類僅僅只是繼承函式的介面,告訴子類的設計者“你必須在子類中提供一個純虛擬函式的實現,但我不知道你會怎麼樣實現它”
2.引入純虛擬函式,則編譯器要求在子類中必須予以重寫以實現多型性
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <cmath>
#include <iostream>
using namespace std;
class A
{
public:
virtual void play()=0;
/*void run()
{
cout<<"A runing"<<endl;
}*/
};
class B:public A
{
public:
/*void play()
{
cout<<"B playing"<<endl;
}*/
};
class C:public A
{
public:
/*void play()
{
cout<<"C playing"<<endl;
}*/
};
int main()
{
//A *a=new B;
A a;
a.play();
return 0;
}
- 1
錯誤提示A是抽象類,play是純虛擬函式
可以看出子類必須對純虛擬函式進行實現
二、什麼是抽象類
含有純虛擬函式的類稱為抽象類,它不能生成物件,而且只能是基類
抽象類為什麼不能生成物件?
因為抽象類宣告瞭純虛擬函式,所以使用者不能建立類的純虛擬函式例項,只能建立它的派生類的例項
抽象類的作用
將有關的操作作為結果介面組織在一個繼承層次結構中,由它為子類提供一個公共的根,子類將具體實現在其基類中作為介面的操作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <cmath>
#include <iostream>
using namespace std;
class A
{
public:
virtual void play()=0;
void run()
{
cout<<"A runing"<<endl;
}
};
class B:public A
{
public:
void play()
{
cout<<"B playing"<<endl;
}
};
class C:public A
{
public:
void play()
{
cout<<"C playing"<<endl;
}
};
int main()
{
A *b=new B;
b->play();
A *c=new C;
c->play();
return 0;
}
三、歸納ING
1.純虛擬函式沒有定義
2.純虛擬函式是用來規範子類的行為,即介面
3.抽象類不能定義例項,但可以宣告指向實現該抽象類的具體類的指標或引用
4.定義純虛擬函式就是為了讓基類不能例項化,因為例項化並沒有意義
5.純虛擬函式的引入更加安全:因為它避免了不小心沒有去實現的問題,它會提醒子類去做相應的實現
6.純虛擬函式的引入更加有效率:編碼的效率會提升!
轉載:http://blog.csdn.net/w_linux/article/details/70554828
相關文章
- 設計模式 - 抽象工廠設計模式抽象
- 設計模式----抽象工廠設計模式抽象
- 設計模式 – 抽象工廠設計模式抽象
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- 設計模式——抽象工廠模式設計模式抽象
- C++ 抽象類快速使用C++抽象
- 一些程式設計題目的解析程式設計
- java設計模式–抽象工廠模式Java設計模式抽象
- 設計模式——抽象工廠實驗設計模式抽象
- Java設計模式-抽象工廠模式Java設計模式抽象
- SAP相關會計科目的設定OBYC
- 建立型設計模式——抽象工廠模式設計模式抽象
- golang設計模式之抽象工廠模式Golang設計模式抽象
- 23種設計模式之抽象工廠設計模式抽象
- 程式設計的一些抽象核心程式設計抽象
- 設計模式(三)抽象工廠方法模式設計模式抽象
- 設計模式系列之「抽象工廠模式」設計模式抽象
- 23種設計模式(抽象工廠模式)設計模式抽象
- 讀軟體設計的要素02概念的目的
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- Java常用設計模式之抽象工廠模式Java設計模式抽象
- 資料設計模式一般很抽象設計模式抽象
- 設計模式-抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式學習(六)-抽象工廠模式設計模式抽象
- C#面向抽象程式設計第二講C#抽象程式設計
- C++核心程式設計C++程式設計
- 設計模式快速學習(二)抽象工廠模式設計模式抽象
- python物件導向之抽象工廠設計模式Python物件抽象設計模式
- 面向介面程式設計實踐之aspnetcoreapi的抽象程式設計NetCoreAPI抽象
- Java中的介面與抽象類設計原則Java抽象
- 程式設計師永遠不應該相信"抽象“程式設計師抽象
- C#面對抽象程式設計第一講C#抽象程式設計
- Rust語言之GoF設計模式:抽象工廠模式RustGo設計模式抽象
- 淺談C++物理設計:設計原則C++
- C++中的抽象基類(Abstract Base Class)C++抽象
- C++程式設計實現C++程式設計
- C++ 提高程式設計C++程式設計