1樓:我愛你罁
純虛擬函式是在基類中宣告的虛擬函式,它可以在基類中有定義,而且派生類必須定義自己的實現方法。基類不能生成物件,可以使用指標或者引用派生類物件。基類不在基類中實現純虛擬函式的方法是在函式原型後加「=0」
virtual void funtion1()=0 1、為了方便使用多型特性,我們常常需要在基類中定義虛擬函式。
2、在很多情況下,基類本身生成物件是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。
為了解決上述問題,引入了純虛擬函式的概念,將函式定義為純虛擬函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多型性。同時含有純虛擬函式的類稱為抽象類,它不能生成物件。
這樣就很好地解決了上述兩個問題。 1、多型性
指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。c++支援兩種多型性:編譯時多型性,執行時多型性。
a.編譯時多型性:通過過載函式實現
b 執行時多型性:通過虛擬函式實現。
2、虛擬函式
虛擬函式是在基類中被宣告為virtual,並在派生類中重新定義的成員函式,可實現成員函式的動態過載
3、抽象類
包含純虛擬函式的類稱為抽象類。由於抽象類包含了沒有定義的純虛擬函式,所以不能定義抽象類的物件。
2樓:巢理青康震
基類定義純虛擬函式後。子類必須完善函式體才可以定義物件。如果不對此純虛擬函式完善。
依舊無法定義物件。也就是說對子類也有限制作用。有利於介面一致。
更好的實現多型。個人看法。
3樓:望瑞冷採夢
這麼明顯的錯誤看不出來嗎?
基類裡面有這個
虛擬函式:
virtual
double
getvolume()=0;//體積
在繼承類裡面沒有例項化,三角形沒有體積,你把基類裡面的求體積註釋掉。
c++中純虛擬函式有什麼作用?
4樓:何度千尋
通過它可以指明一個虛擬函式只是提供了一個可被子型別改寫的介面。
純虛擬函式是在基類中宣告的虛擬函式,它可以在基類中有定義,而且派生類必須定義自己的實現方法。基類不能生成物件,可以使用指標或者引用派生類物件。基類不在基類中實現純虛擬函式的方法是在函式原型後加「=0」
virtual void funtion1()=0引入原因/純虛擬函式的作用
為了方便使用多型特性,我們常常需要在基類中定義虛擬函式。
在很多情況下,基類本身生成物件是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。
為了解決上述問題,引入了純虛擬函式的概念,將函式定義為純虛擬函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多型性。同時含有純虛擬函式的類稱為抽象類,它不能生成物件。
這樣就很好地解決了上述兩個問題。
5樓:匿名使用者
1。父類中如果都是純虛擬函式,那麼此父類可以作為介面(inte***ce)。
2。父類中存在純虛擬函式,子類中重寫(override)該函式,可實現多型。
c++中純虛擬函式可以有函式體嗎?
6樓:匿名使用者
可以有,但是沒必要這樣做,好得設計不會這樣設計的。這只是概念問題。知道可以就可以了
1l說的不確切。純虛擬函式新增函式體,依舊為純虛擬函式,類依舊是抽象類,不能例項化
2l說的很明確,既然純虛擬函式所在的類為抽象,那麼為純虛擬函式新增函式體是完全沒有必要的。可以有函式體,但是這不是一種好得設計方式。既然是公共介面,新增函式體多此一舉。
7樓:匿名使用者
***下面是我暫時想到的,不知道我的理解是否正確***
*** 如果學習c++ 的話,不防看看《c++ 程式設計思想》兩卷 ***
為什麼要引入純虛擬函式?如果它有了函式體,那它還是純虛擬函式嗎?
1) 含有純虛擬函式的類叫做抽象類,抽象類從概念上理解,就是不能例項化物件。
如 對於下面的類來說,
class abstractc
;當宣告一個abstractc objab; 時就會報error。
但從implementation 實現來理解,抽象類物件可以作為一個佔位符(只能使用指標或引用)
void globalfun( abstractc *inputobj);
即任何實現了abstractc的類都是可以作為globalfun的引數。(這裡是pubblic inheritation, 但不能引入新的函式,除非做型別轉換)。
2) 如果它有了函式體,即如下:
class abstractc
};因為任何包含純虛擬函式的類都是抽象類,即abstractc不能宣告物件,不能例項化物件。那麼這個類的成員函式的函式體能做什麼??所以,加個函式體,就是非常非常不必要了。
因此,純虛擬函式是為了定義抽象類(如abstractc),抽象類可以作為公共介面(如globalfun)來使用。
8樓:匿名使用者
不能有,有了就不叫純虛了。
c++中 虛擬函式與純虛擬函式的區別是什麼?
9樓:月無痕
虛擬函式與純虛擬函式 在他們的子類中都可以被重寫。它們的區別是:
(1)純虛擬函式只有定義,沒有實現;而虛擬函式既有定義,也有實現的**。
純虛擬函式一般沒有**實現部分,如
virtual void print() = 0;
而一般虛擬函式必須要有**的實現部分,否則會出現函式未定義的錯誤。
virtual void print()
(2)包含純虛擬函式的類不能定義其物件,而包含虛擬函式的則可以。
c++中純虛擬函式的宣告只有等於零這一種方法嗎? 如 virtual <型別><函式名>(<參數列>)=0;
10樓:匿名使用者
=0是宣告純虛擬函式,就是告訴編譯器,這個函式沒有實現。
如果樓主只是想宣告虛擬函式,就可以不寫=0,但要提供實現。
11樓:匿名使用者
純虛函宣告只有一種:
virtual 《型別》《函式名》(《參數列》)=0;
如果子類中沒有實現父類中相關的純虛擬函式,則子類也是抽象類
12樓:匿名使用者
這是在基類中這樣宣告。
繼承類中就不需要virtual 關鍵字。
13樓:water星痕
是的,特殊的表現方式就是=0,類似於一種標誌,只要你看到就知道它是純虛擬函式。
14樓:匿名使用者
純虛擬函式的話,好像是隻有一種
否則怎麼體現純虛呢
c++ 問題:只要有一個純虛擬函式的類叫做 抽象類 或者 基類 對嗎?
15樓:匿名使用者
抽象類的定義:帶有純虛擬函式的類稱為抽象類,而抽象類只能作為基類來使用,所以只要有一個純虛擬函式的類叫抽象類,但基類不一定全是抽象類。
虛擬函式的定義,C 中虛擬函式必須有定義嗎?
赫連巧山 1.虛擬函式的定義 虛擬函式用來表現基類和派生類的成員函式之間的一種關係.虛擬函式的定義在基類中進行,在需要定義為虛擬函式的成員函式的宣告前冠以關鍵字 virtual.基類中的某個成員函式被宣告為虛擬函式後,此虛擬函式就可以在一個或多個派生類中被重新定義.在派生類中重新定義時,其函式原型,...
關於c中虛擬函式的問題
然後去遠足 1 題主犯了很低階的錯誤 class1 cd new class1 b cd1 new b console.writeline cd.fuc 1 輸出的是 cd 物件的 fuc 方法,cd 物件是 class1 型別,結果是 1 是完全正確的。2 不 override 的這種寫法叫做 隱...
C虛方法的作用,c 中,虛方法的特點是什麼?
他的子類可以重寫也可以不重寫,實現多型 c 中的虛方法究竟有什麼用了 這個區別可就大了。從類這種機制看,你覆蓋是把東西換了,對於這個類來說,以前的方法不存在了。重寫是你在這個類的虛擬函式表 不清楚自己查下 裡增加了一項,並沒有覆蓋,是一種動態性的調整。例子,類a和類b的繼承關係是類b繼承類a,然後有...