規定不能建立抽象基類的物件的原因
純虛擬函式是一種特殊的虛擬函式,它的一般格式如下:
class <類名>
{
virtual <型別><函式名>(<引數表>)=0;
…
};
在許多情況下,在基類中不能對虛擬函式給出有意義的實現,而把它宣告為純虛擬函式,它的實現留給該基類的派生類去做。這就是純虛擬函式的作用。
純虛擬函式可以讓類先具有一個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛擬函式的類叫做抽象類。這種類不能宣告物件,只是作為基類為派生類服務。除非在派生類中完全實現基類中所有的的純虛擬函式,否則,派生類也變成了抽象類,不能例項化物件。
二、純虛擬函式引入原因
1、為了方便使用多型特性,我們常常需要在基類中定義虛擬函式。
2、在很多情況下,基類本身生成物件是不合情理的。例如,動物作為一個基類可以派生出老虎、孔 雀等子類,但動物本身生成物件明顯不合常理。
為了解決上述問題,引入了純虛擬函式的概念,將函式定義為純虛擬函式(方法:virtual ReturnType Function()= 0;)。若要使派生類為非抽象類,則編譯器要求在派生類中,必須對純虛擬函式予以過載以實現多型性。同時含有純虛擬函式的類稱為抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。
相關推薦
規定不能建立抽象基類的物件的原因
一、純虛擬函式定義 純虛擬函式是一種特殊的虛擬函式,它的一般格式如下: class <類名> { virtual <型別><函式名>(<引數表>)=0; … }; 在許多情況下,在基類中不能對虛擬函式給出有意義的實現,而把它宣告為純虛擬函式,它的實現
4.6 C++抽象基類和純虛成員函數
中新 error isp ... 先來 必須 pub 對象 c++ 參考:http://www.weixueyuan.net/view/6376.html 總結: 在C++中,可以通過抽象基類來實現公共接口 純虛成員函數沒有函數體,只有函數聲明,在純虛函數聲明結尾加
抽象基類
.cn 面向對象 通過 純虛函數 我們 .html 抽象類 另一個 函數聲明 更多相關內容見http://www.cnblogs.com/mu-ye/p/7754368.html 抽象基類通常代表一個通用概念。 純虛函數 把一個函數聲明為純虛函數可以清
OOP2(虛函數/抽象基類/訪問控制與繼承)
控制 space protected 相對 mes nbsp 獨立 friend 抽象類 通常情況下,如果我們不適用某個函數,則無需為該函數提供定義。但我們必須為每個虛函數都提供定義而不管它是否被用到了,這因為連編譯器也無法確定到底會適用哪個虛函數 對虛函數的調用可能在
python(七):元類與抽象基類
imp 匿名 exec int 上下文 增加 abstract 分割 als 一、實例創建 在創建實例時,調用__new__方法和__init__方法,這兩個方法在沒有定義時,是自動調用了object來實現的。python3默認創建的類是繼承了object。 c
【C++ Primer 第15章】抽象基類
*** rim ica include margin urn 對象 class mes 抽象基類 【註意】我們也可以為純虛函數提供定義,不過函數體必須在類的外部,也就是說,我們不能再內部為一個=0思網函數提供函數體。 C++中含有(或未覆蓋直接繼承)純虛函數的類是抽象
OC 建立TableView基類並結合MJRefresh實現上拉重新整理,下拉載入
1.建立繼承自UITableView的基類BaseTableView: #import <UIKit/UIKit.h> @class BaseTableView; @protocol BaseTableViewDelegate <NSObject> @option
抽象基類(ABC)
1.定義一個ABC類。 2.包含A和B共有的所有方法和資料成員。 3.在A/B中行為不同的方法,被宣告為虛擬函式。 4.至少一個純虛擬函式,這樣才能成為ABC。 ABC描述的是至少使用一個純虛擬函式介面,從ABC派生的類將根據其特徵,實現介面。  
Java類載入器( CLassLoader ) 死磕 3: 揭祕 ClassLoader抽象基類
【正文】Java類載入器( CLassLoader ) 死磕 3: 揭祕 ClassLoader抽象基類 (1)一個載入器的parent是誰? (2)為什麼優先從parent載入,而不是從自己的地盤載入?欲知後事如何,請看下回分解。 原始碼: 程式碼工程: class
第13周-任務3-抽象基類Shape及派生類Circle Rectangle和Triangle
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
spring aspect獲取抽象基類日誌
在實際的專案開發過程中我們其實封裝了很多的類似BaseService、BaseDao等的基類,然後在切日誌的時候我們一般是指向繼承改抽象基類的實現類的,這時候我們就會出現無法切出呼叫抽象基類方法的日誌;使用以下方案可以完成基類和實現類的日誌獲取; 專案結構如下: 解決方案: 配置如下: <
為什麼基類的指標可以指向派生類物件,但是派生類指標不能指向基類物件
Derive *bp1; Derive dpp; bp1 = &dpp; bp1->show(); Base bpp; bp1 = &bpp; //錯誤 假設有個people類是基類,成員有姓名和身份證號,有個派生類學生student,添加了成員
python 抽象基類
具體化抽象基類的兩種方式: 1、通過抽象基類 ABCMeta 的 register 方法註冊。 2、通過繼承的方式。 class Base(metaclass = ABCMeta): @classmethod def __subclasshook__(cls, su
習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上。。。
C++程式設計(第三版) 譚浩強 習題12.4 個人設計 習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三
習題 12.5 寫一個程式,定義抽象基類Shape,由它派生出5個派生類:Circle、Square、Rectangle、Tarpezoid、Triangle。用虛擬函式分別計算幾種圖形面積,並求。。。
C++程式設計(第三版) 譚浩強 習題12.5 個人設計 習題 12.5 寫一個程式,定義抽象基類Shape,由它派生出5個派生類:Circle、Square、Rectangle、Tarpezoid、Triangle。用虛擬函式分別計算幾種圖形面積,並求它們的和
abc模組-抽象基類
初次見到這個模組,一臉懵逼,怎麼還有這種命名方式,後來才瞭解,原來只是簡稱,全稱是abstract base classes,中文名抽象基類。有點類似於java中的抽象介面的概念。我認為它的主要作用是就是我們常說的繼承和多型,抽象基類中可以選擇定義
python之抽象基類
抽象基類特點 1.不能夠例項化 2.在這個基礎的類中設定一些抽象的方法,所有繼承這個抽象基類的類必須覆蓋這個抽象基類裡面的方法 思考 既然python中有鴨子型別,為什麼還要使用抽象基類? 一是我們在某些情況下希望判定某個物件的型別: from collections.abc import Sized
利用配置檔案,在工廠中建立一個實現類物件
package cn.itcast.usermng.dao; import java.io.InputStream; import java.util.Properties; /** * 通過配置檔案得到dao實現類的名稱! * 通過類名稱,完成建立類物件!(反射完成
寫一個程式,定義抽象基類Shape,由它派生出3個派生類: Circle(圓形)、Rectangle(矩形)、Triangle(三角形)
寫一個程式,定義抽象基類Shape,由它派生出3個派生類: Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上三者的面積,3個圖形的資料在定義物件時給定。 #include<iostream> usi
建立普通內部類物件與建立巢狀類物件的不同
為什麼需要使用內部類? 使用內部類的原因:每個內部類都能獨立的繼承自一個(介面的)實現,所以無論外部類是否已經繼承了某個(介面的)的實現,對內部類都沒有影響。實際上內部類有效的實現了“多重繼承”,就是說,內部類允許繼承多個非介面型別。 我們知道內部類自動擁有