c純虛擬函式,C 中純虛擬函式有什麼作用

2021-04-19 01:28:37 字數 3371 閱讀 1330

1樓:匿名使用者

純虛擬函式就是抽象類函式。宣告是virtual void fn()=0; 沒有實現體的函式。

2樓:春雨_潤物

補充一點,含有純虛擬函式的類是抽象類

3樓:匿名使用者

純虛擬函式是一種特du殊的虛函zhi數,它的一般格式dao如下:

專class 《類名》   屬

;  在許多情況下,在基類中不能對虛擬函式給出有意義有實現,而把它說明為純虛擬函式,它的實現留給該基類的派生類去做。這就是純虛擬函式的作用。   純虛擬函式可以讓類先具有一個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。

凡是含有純虛擬函式的類叫做抽象類。這種類不能宣告物件,只是作為基類為派生類服務。在派生類中必須完全實現基類的純虛擬函式,否則,派生類也變成了抽象類,不能例項化物件

4樓:衄潲

純虛擬函式就是沒有函式體的函式。比如virtual void shape()=0;

c++中純虛擬函式有什麼作用?

5樓:何度千尋

通過它可以指明一個虛擬函式只是提供了一個可被子型別改寫的介面。

純虛擬函式是在基類中宣告的虛擬函式,它可以在基類中有定義,而且派生類必須定義自己的實現方法。基類不能生成物件,可以使用指標或者引用派生類物件。基類不在基類中實現純虛擬函式的方法是在函式原型後加「=0」

virtual void funtion1()=0引入原因/純虛擬函式的作用

為了方便使用多型特性,我們常常需要在基類中定義虛擬函式。

在很多情況下,基類本身生成物件是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。

為了解決上述問題,引入了純虛擬函式的概念,將函式定義為純虛擬函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多型性。同時含有純虛擬函式的類稱為抽象類,它不能生成物件。

這樣就很好地解決了上述兩個問題。

6樓:匿名使用者

1。父類中如果都是純虛擬函式,那麼此父類可以作為介面(inte***ce)。

2。父類中存在純虛擬函式,子類中重寫(override)該函式,可實現多型。

c++中 虛擬函式與純虛擬函式的區別是什麼?

7樓:月無痕

虛擬函式與純虛擬函式 在他們的子類中都可以被重寫。它們的區別是:

(1)純虛擬函式只有定義,沒有實現;而虛擬函式既有定義,也有實現的**。

純虛擬函式一般沒有**實現部分,如

virtual void print() = 0;

而一般虛擬函式必須要有**的實現部分,否則會出現函式未定義的錯誤。

virtual void print()

(2)包含純虛擬函式的類不能定義其物件,而包含虛擬函式的則可以。

c++中純虛擬函式可以有函式體嗎?

8樓:匿名使用者

可以有,但是沒必要這樣做,好得設計不會這樣設計的。這只是概念問題。知道可以就可以了

1l說的不確切。純虛擬函式新增函式體,依舊為純虛擬函式,類依舊是抽象類,不能例項化

2l說的很明確,既然純虛擬函式所在的類為抽象,那麼為純虛擬函式新增函式體是完全沒有必要的。可以有函式體,但是這不是一種好得設計方式。既然是公共介面,新增函式體多此一舉。

9樓:匿名使用者

***下面是我暫時想到的,不知道我的理解是否正確***

*** 如果學習c++ 的話,不防看看《c++ 程式設計思想》兩卷 ***

為什麼要引入純虛擬函式?如果它有了函式體,那它還是純虛擬函式嗎?

1) 含有純虛擬函式的類叫做抽象類,抽象類從概念上理解,就是不能例項化物件。

如 對於下面的類來說,

class abstractc

;當宣告一個abstractc objab; 時就會報error。

但從implementation 實現來理解,抽象類物件可以作為一個佔位符(只能使用指標或引用)

void globalfun( abstractc *inputobj);

即任何實現了abstractc的類都是可以作為globalfun的引數。(這裡是pubblic inheritation, 但不能引入新的函式,除非做型別轉換)。

2) 如果它有了函式體,即如下:

class abstractc

};因為任何包含純虛擬函式的類都是抽象類,即abstractc不能宣告物件,不能例項化物件。那麼這個類的成員函式的函式體能做什麼??所以,加個函式體,就是非常非常不必要了。

因此,純虛擬函式是為了定義抽象類(如abstractc),抽象類可以作為公共介面(如globalfun)來使用。

10樓:匿名使用者

不能有,有了就不叫純虛了。

c++裡定義純虛擬函式

11樓:

你概念有點混淆了,這個virtual void fun()=0; 是純虛擬函式;virtual void fun(); 是虛擬函式。它們是有區別的。有純虛擬函式的類一般都是虛基類,主要用於繼承,讓子類來實現虛擬函式。

虛擬函式的作用當然是多型了~~

class base

{public:

void base::fun() {cout<<"base"

return 0;

} 如果fun 是虛擬函式顯示什麼,不是虛擬函式顯示什麼?自己試試

c++中虛擬函式和純虛擬函式的作用與區別

12樓:匿名使用者

包含純虛擬函式的類不可以例項化。

c++中虛擬函式和純虛擬函式有什麼區別?

13樓:鍋勁

使用虛擬函式,我們可以靈活的進行動態繫結,當然是以一定的開銷為代價。 如果父類的函式(方法)根本沒有必要或者無法實現,完全要依賴子類去實現的話,可以把此函式(方法)設為virtual 函式名=0 我們把這樣的函式(方法)稱為純虛擬函式。

也就是說,虛擬函式 ,子類可以不重寫,直接繼承父類 的方法來使用,也可以重寫

但是 純虛擬函式是子類是必須重寫了才可以使用

14樓:衄潲

純虛擬函式,沒有方法體,留給子類去實現。而虛擬函式必須有方法體,子類可以重寫,也可以不重寫

15樓:匿名使用者

虛擬函式可是實現方法

純虛擬函式沒有函式體,也就是不能實現方法,只能給後面的派生類供宣告,後面跟著=0;

有純虛擬函式一般為抽象基類

16樓:匿名使用者

避免繼承帶來的二義性

C 中純虛擬函式和空的虛擬函式各自的作用是什麼呢?他們應該怎麼

虛擬函式是baic 多型的一種表現 du例如 子類繼承了 zhi父類的一個函式dao 方法 內 而我們把父類容的指標指向子類,則必須把父類的該函式 方法 設為virturl 虛擬函式 使用虛擬函式,我們可以靈活的進行動態繫結,當然是以一定的開銷為代價。如果父類的函式 方法 根本沒有必要或者無法實現,...

c什麼時候使用虛擬函式,什麼是虛擬函式,C虛擬函式講解

虛擬函式就是在基類中被關鍵字virtual說明,並在派生類中重新定義的函式。虛擬函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。虛擬函式就是為了讓基類指標 或引用 能訪問派生類中定義的成員。什麼是虛擬函式,c 虛擬函式講解 在某基類中宣告...

什麼是虛擬函式,C虛擬函式講解,是不是隻有虛擬函式才能定義為純虛擬函式,C語法。

在某基類中宣告為 virtual 並在一個或多個派生類中被重新定 義的成員函式,用法格式為 virtual 函式返回型別 函式名 參數列 實現多型性,通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。虛擬函式定義 簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛擬函式。虛擬函式...