首頁 後端開發 C#.Net教程 虛函數和純虛函數的差別是什麼?

虛函數和純虛函數的差別是什麼?

Nov 17, 2020 am 09:30 AM
純虛函數 虛函數

虛函數與純虛函數的差別:1、純虛函數只有定義,沒有實作;而虛函數既有定義,也有實現的程式碼。 2.包含純虛函數的類別不能定義其對象,而包含虛函數的則可以。

虛函數和純虛函數的差別是什麼?

相關推薦:《C 影片教學

虛函數(impure virtual)

  C 的虛函數主要作用是“運行時多型”,父類別中提供虛函數的實現,為子類別提供預設的函數實作。
  子類別可以重寫父類別的虛函數實作子類別的特殊化。
  如下就是一個父類中的虛函數:

class A
{
public:
     virtual void ss()
    {
        cout<<"我是基类的虚函数"<<endl;
    }
};
登入後複製

#純虛函數(pure virtual)

  C 中包含純虛函數的類,被稱為為是「抽象類別」。抽象類別不能使用new出對象,只有實作了這個純虛函數的子類別才能new出對象。
  C 中的純虛函數更像是“只提供申明,沒有實現”,是對子類別的約束,是“介面繼承”。
  C 中的純虛函數也是一種「運行時多型」。
  如下面的類別包含純虛函數,就是「抽象類別」:

class A
{
public:
    virtual void out1(string s)=0;  //我是基类的虚函数 
};
登入後複製

舉個栗子

#include<iostream>
#include<string>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
class a
{
	private:
	
	public:
		a(){      //构造函数用内联函数的形式 
			
		}
		//虚函数 
		virtual  void  xhs(){   	   //这个虚函数必须得在基类中实现 
			cout<<"我是基类的虚函数"<<endl;//即使是空的虚函数也要在基类中实现 
		}  //派生类中可以不写这个函数,但是派生类对象调用时会调用积累的虚函数 
		
		//纯虚函数 
		virtual void cxhs() =0;  //这个纯虚函数不在基类中实现,必须在子类中实现 
		
}; 
class b:public a
{
	private:
		
    public:
    	void xhs(){         //这个是可有可无的 
    		cout<<"我是派生类覆盖基类虚函数的函数"<<endl; 
		}                        //*
		                         //*
		void cxhs(){         //这个是必须有实现的 
			cout<<"我是派生类覆盖基类虚函数的函数"<<endl; 
		}       //*              //*
}; 				//* 			 //*
int main()      //*              //*
{               //*              //*
	b c;        //*              //* 
	c.xhs();    //*           //调用派生类的 
	c.cxhs();//调用派生类的 
}
登入後複製

#虛函數與純虛函數的區別

1)、純虛函數只有定義,沒有實現;而虛函數既有定義,也有實現的程式碼。

純虛函數一般沒有程式碼實作部分,如virtual void print() = 0; 2)而一般虛函數必須要有程式碼的實作部分,否則會出現函數未定義的錯誤。

2)、包含純虛函數的類別不能定義其對象,而包含虛函數的則可以。

以上是虛函數和純虛函數的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函式偵錯詳解:如何除錯虛擬函式中的問題? C++ 函式偵錯詳解:如何除錯虛擬函式中的問題? May 02, 2024 pm 03:42 PM

虛擬函數偵錯方法:設定斷點單步執行;使用assert()驗證條件;利用偵錯器工具檢查動態類型、函數堆疊和重新定義虛擬函數。

C++ 函式重載與虛擬函式如何協作? C++ 函式重載與虛擬函式如何協作? Apr 26, 2024 am 10:09 AM

C++中函数重载允许为具有不同参数的同名函数定义不同的实现,而虚函数允许在派生类中覆盖基类函数,实现多态性。函数重载和虚函数可以协同工作,通过在基类中设计一个虚拟重载函数,派生类可以仅重载特定参数组合的版本,从而提供更灵活的多态性,如实战案例中计算不同类型形狀到原點的距離。

C++ 友元函數與虛擬函數的交互 C++ 友元函數與虛擬函數的交互 Apr 16, 2024 pm 03:45 PM

在C++中,友元函數與虛擬函數互動使友元函數可以存取虛擬函數,並呼叫衍生類別中的友元函數存取基底類別的私有成員。這種互動可用於存取繼承體系中隱藏的資料或實作多型行為。

C++ 中如何宣告和呼叫虛擬函式? C++ 中如何宣告和呼叫虛擬函式? Apr 12, 2024 pm 04:03 PM

虛擬函數是一種多態性機制,允許衍生類別覆寫其基底類別的成員函數:聲明:在函數名稱前加上關鍵字virtual。呼叫:使用基底類別指標或引用,編譯器將動態綁定到衍生類別的適當實作。實戰案例:透過定義基底類別Shape及其衍生類別Rectangle和Circle,展示虛函數在多態中的應用,計算面積和繪製形狀。

C++ 函式可以宣告為虛函式嗎?虛函數的作用是什麼? C++ 函式可以宣告為虛函式嗎?虛函數的作用是什麼? Apr 19, 2024 pm 06:06 PM

C++中的虛函數允許衍生類別重新定義從基底類別繼承的方法,實現多態。其語法為:在基底類別中用virtual關鍵字宣告虛擬函數,在衍生類別中用override重新定義。透過指標或引用呼叫虛擬函數,可實現衍生類別物件呼叫基底類別虛函數。虛函數的主要作用包括:實作多態、支援動態綁定和提供抽象。

C++ 中純虛函式如何促進多態性? C++ 中純虛函式如何促進多態性? Jun 03, 2024 pm 08:01 PM

在C++中,純虛函數在基底類別中被宣告但沒有實現,迫使衍生類別實現特定行為,以促進多態性。衍生類別必須實作所有純虛函數,否則它們也必須成為抽象類別。純虛函數可確保只有實作了所有純虛函數的類別才能用作抽象類別的指標或引用,從而確保多態性。在圖形繪製等實際案例中,它可以確保所有形狀物件都能回應draw()調用,實現多態性,提高程式碼的可擴展性和可維護性。

C++ 虛擬函數的奧秘揭曉 C++ 虛擬函數的奧秘揭曉 Apr 19, 2024 am 09:18 AM

虛函數使用動態綁定在運行時決定要呼叫的函數,以實現多態性。其優點包括可擴展性、可重複使用性,但也會帶來開銷和複雜性。虛擬函數經常用於實作不同類型的物件以統一的方式呼叫方法。

C++中的虛擬函式和純虛函式的應用技巧 C++中的虛擬函式和純虛函式的應用技巧 Aug 22, 2023 am 11:33 AM

C++中的虛擬函式和純虛函式是許多使用物件導向程式設計的程式設計師常用的工具。在正確使用它們的前提下,可以大大提高程式的靈活性和可維護性。本文將探討虛擬函數和純虛函數的應用技巧,並分享一些實際開發的經驗。一、虛擬函數1.什麼是虛擬函數?虛擬函數是用於實現多態的一種技術,它允許類別的成員函數在運行時動態確定。當使用基底類別指標或引用呼叫虛擬函數時,程式會根據實際物件的類型

See all articles