1. 程式人生 > >什麼是虛擬函式,虛擬函式和普通函式有何不同,帶有虛擬函式的類什麼時候都可以例項化嗎?

什麼是虛擬函式,虛擬函式和普通函式有何不同,帶有虛擬函式的類什麼時候都可以例項化嗎?


程式碼或者內容有任何問題,請留言相告,不勝感激!!!!!

什麼是虛指標?
虛指標又叫虛擬函式指標是一個虛擬函式的實現細節,帶有虛擬函式的類中每一個物件都有一個虛指標指向該類的虛擬函式表

虛擬函式的入口地址和普通函式的入口地址有什麼不同?
每個虛擬函式都在虛表中佔有一個表項,儲存著一條跳轉到它的入口地址的指令(實際上儲存了他的入口地址)
當一個包含虛擬函式的物件被建立的時候,它的頭部附加一個指標,指向虛表中相應的位置,呼叫虛擬函式的時候,不管你用什麼指標呼叫的

它現根據虛表找到入口地址再執行,從而實現了動態聯編,而不像普通函式簡單跳轉到一個固定地址(下面是圖示演示的過程)


//如果A是B的一部分,則不允許B從A派生,要用A和其他東西組合出B
//看程式碼
#include <iostream>
#include<string>
using namespace std;
class shape
{
public:
shape(){}
~shape(){}
virtual void Draw() =0;//要想可以被例項化,就是把純虛擬函式改為虛擬函式
};
int main()
{
shape s1;//類中有純虛擬函式是不能例項化的,修改辦法就是把它變成虛擬函式

}