1. 程式人生 > >c++純虛擬函式

c++純虛擬函式

在基類中,純虛擬函式也不一定不能定義。以前一直認為純虛擬函式只能被派生類定義,看了另一本書以後,才發現也有特殊情況。

class CBase{
public:
 virtual void pure() = 0;
};

class CDerived:public CBase{
public:
 void pure() {cout<<"CDerived::pure"<<endl;}
 void foo(){CBase::pure();}
};
void CBase::pure(){cout<<"CBase::pure"<<endl;}

int main(int argc, char **argv)
{
 CDerived d;
 d.CBase::pure();
 d.foo();
 d.pure();
 CBase *b = &d;
 b->pure();
 return 0;
}

相關推薦

C++虛擬函式虛擬函式

C++純虛擬函式 一、定義  純虛擬函式是在基類中宣告的虛擬函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛擬函式的方法是在函式原型後加“=0”  virtual void funtion1()=0 二、引入原因   1、為了方便使用多型特性,我們常常需要在基類

c++ 虛擬函式和抽象類

一 基本概念 1 純虛擬函式是一個在類中宣告的虛擬函式,在類中沒有定義實體,要求各派生類定義自己的版本。 2 純虛擬函式為各派生類提供一個公共介面(介面的封裝設計、軟體的模組功能劃分); 3 語法:virtual 型別 函式名(引數)=0; 4 一個具有純虛擬函式的類成為抽象類。

c++ 虛擬函式匯出

 一、匯出類的簡單方式 這種方式是比較簡單的,同時也是不建議採用的不合適方式。 只需要在匯出類加上__declspec(dllexport),就可以實現匯出類。物件空間還是在使用者的模組裡,dll只提供類中的函式程式碼。不足的地方是:使用者需要知道整個類的實現,包括

C++虛擬函式和Java中的抽象函式區別

一直我對c++純虛擬函式的理解有個誤區:純虛擬函式是不能給出定義的。果然是學藝不精。c++中的純虛擬函式和java中的抽象函式很類似,我把相關概念搞混淆了,這裡總結一下:java中的抽象函式是隻有函式

c++虛擬函式

在基類中,純虛擬函式也不一定不能定義。以前一直認為純虛擬函式只能被派生類定義,看了另一本書以後,才發現也有特殊情況。 class CBase{ public:  virtual void pure() = 0; }; class CDerived:public CBase{

一道考察類的虛擬函式定義,靜態變數等C++題目

程式原題如下: #pragma  once class mml { private:static unsigned int x; public:mml(){  x++;  }mml(static unsigned int&){  x++; &

C++多型,虛擬函式虛擬函式表,虛擬函式

1、多型性   指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。   C++支援兩種多型性:編譯時多型性,執行時多型性。    a、編譯時多型性:通過過載函式實現 ,模板(2次編譯)   b、執行時多型性:通過

《隨筆十二》—— C++中的 “ 虛擬函式 和 抽象類 ”

目錄 抽象類 純虛擬函式 抽象類 ●   抽象類:  不用於定義物件而只作為一種基本型別用做繼承的類,稱為抽象類, 由於它常用於做基類, 通常稱為抽象基類。  那麼凡是包含純虛擬函式的類都是抽象類, 抽象類是一種特殊的類,

C++中的虛擬函式、抽象類、介面

純虛擬函式就是沒有函式體的虛擬函式,通常都以下列格式定義純虛擬函式: class <類名> { virtual <型別><函式名>(形參表) = 0; ... } 在虛擬函式後面加"=0",這並不代表虛擬函式返回值為

C++系列(虛擬函式和抽象類)

下面通過一個例子來說明純虛擬函式的定義方法 在這個類當中,我們定義了一個普通的虛擬函式,並且也定義了一個純虛擬函式。那麼,純虛擬函式是什麼呢??從上面的定義可以看到,純虛擬函式就是沒有函式體,同時在定義的時候,其函式名後面要加上“= 0”。 純虛擬函式的實現原理 本節

C++學習筆記】 虛擬函式虛擬函式概念

源至:https://blog.csdn.net/hackbuteer1/article/details/7558868 虛擬函式:定義一個函式為虛擬函式,不代表函式為不被實現的函式,定義他為虛擬函式是為了允許用基類的指標來呼叫子類的這個函式。(注意:子類中非基類虛擬函式不能被基類呼叫) 純虛擬

詳解C++中的虛擬函式虛擬函式區別)&多型性 以及理解

#include <iostream> #include <cstdio> using namespace std; class A { public:     void foo()     {         printf("1\n");    

C++虛擬函式虛擬函式和抽象類

1 虛擬函式     虛擬函式是類的一種特殊成員函式,主要是為實現C++的多型特性引入。     虛擬函式之所以“虛”是因為呼叫的虛擬函式不是在靜態編譯(靜態編聯)時確定,而是在執行時通過動態編聯確定的。     多型核心理念即是通過基類訪問派生的子類,通常情況是藉助基類指

C++:11---虛擬函式虛擬函式表、多型、虛擬函式(抽象類、介面)

 介紹虛擬函式之前,先舉一個繼承中的例項 class A { public: void show()const {cout<<"A";}; }; class B:public A //B繼承於A { public: void show()cons

c++中虛擬函式虛擬函式定義

      只有用virtual宣告類的成員函式,使之成為虛擬函式,不能將類外的普通函式宣告為虛擬函式。因為虛擬函式的作用是允許在派生類中對基類的虛擬函式重新定義。所以虛擬函式只能用於類的繼承層次結構中。      一個成員函式被宣告為虛擬函式後,在同一類族中的類就不能

C++過載覆蓋和隱藏,虛擬函式虛擬函式

這幾個概念都有一個共同點:函式名稱相同,所以不免讓人混淆,大致的區別如下:過載(overload):必須在一個域中,函式名稱相同但是函式引數不同,過載的作用就是同一個函式有不同的行為,因此不是在一個域中的函式是無法構成過載的,這個是過載的重要特徵覆蓋(override):覆

C++語言特性?虛擬函式虛擬函式的作用與區別?

一、C++語言的特性有哪些? 1、封裝 封裝就是將抽象得到的資料行為(或功能)相結合,形成一個有機的整體,也就是將資料與操作資料的函式程式碼進行有機地結合,形成類,其中的資料和函式都是類的組成部分,稱為類的成員。 2、繼承 繼承是從先輩處得到的屬性和行為特徵。類的繼承,是新

[筆記]c++包含虛擬函式的類不允許被例項化

class CalcTax{ public: virtual void calc_tax()=0; // 純虛擬函式 }; class SalesOrder{ private: Cal

一個例子徹底搞懂c++虛擬函式虛擬函式

學習C++的多型性,你必然聽過虛擬函式的概念,你必然知道有關她的種種語法,但你未必瞭解她為什麼要那樣做,未必瞭解她種種行為背後的所思所想。深知你不想在流於表面語法上的蜻蜓點水似是而非,今天我們就一起來揭開擋在你和虛擬函式(女神)之間的這一層窗戶紙。 首先,我們要

C++ 第六章(多型性和虛擬函式)下篇(虛解構函式虛擬函式

一,虛解構函式 如果用new運算子建立了臨時物件,若基類中有解構函式並且定義了一個指向該基類的指標變數。在程式用帶指標引數的delete運算子撤銷物件時,會發生:系統只執行基類的解構函式,而不執行派生類的解構函式。 #include<iostream> using