虛函式用法總結

2021-08-20 08:35:03 字數 1635 閱讀 7144

#includeusing namespace std;

class class {};

class base :public class

base(int a, int b) :ival(a), dval(b)

// virtual void print()

void print()

int dval;

protected:

int ival;

};class d1 : public base//因為是虛基,因此可以有不同形參的同名函式print;若不是虛基,則不可以有不同形參的同名函式

d1(int a, int b) :base(a, b)

// void print(int a)

// };int main()

#includeusing namespace std;

class class {};

class base :public class

base(int a, int b) :ival(a), dval(b)

// virtual void print()

void print()

int dval;

protected:

int ival;

};class d1 : public base//因為是虛基,因此可以有不同形參的同名函式print;若不是虛基,則不可以有不同形參的同名函式

d1(int a, int b) :base(a, b)

void print() };

class d2 :virtual public base

d2(int a, int b) :base(a, b) };

class mi :public d1/*,public d2*/

mi(int a, int b) :base(a, b), d1(a, b)/*,d2(a,b)*/ };

class final : public mi, public class

// final(int a,int b):base(a,b),mi(a,b)

final(int a, int b) :base(a, b), mi(1, 2)//首先base被base初始化了,然後mi中的base基類初始化就不再呼叫了 };

int main()

兩段**,可以調著進行理解使用

1.     只有乙個基被標記為虛基,才能允許被間接訪問

2.     當乙個基,用派生類來構造它自己時,最後執行的函式,是基中的函式非派生類中的函式;同時,它也只能呼叫自己的函式,不能呼叫派生類中的函式

3.     派生類可以繼承基類中的函式(即使沒有在派生類中寫出來);當寫出來時,則派生類執行自己類內部的成員函式,不執行基類中的成員函式(非虛函式),但成員函式之間要求同名同形參

4.     當基類中的某個成員函式是虛函式時,則後面派生類中的同名成員函式可以有不同的形參

5.     總結:

a)      

虛基,可以間接呼叫;

b)      

虛函式,派生類的同名函式可以有不同形參

(當然也可以不寫出來預設使用基類中的)

C 虛函式和純虛函式用法

1 虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2 虛函式可以被直接使用,也可以被子類 sub class 過載以後以多型的形式呼叫,而純虛函式必須在子...

虛函式與純虛函式用法與區別

絕大多數內容 網上 如果不需要基類對派生類及物件進行操作,則不能定義虛函式,因為這樣會增加記憶體開銷.類裡定義虛函式a時,編譯器會給類新增乙個虛函式表 存放虛函式a的指標 這樣就會增加類的儲存空間 只有當乙個類被用來作為基類的時候,才把析構函式寫成虛函式.1 基類中的 析構函式不是虛函式 成員函式不...

virtual虛函式的用法

根據虛函式的不同位置,有著不同的作用。大致分為3類 虛擬繼承,虛函式,純虛函式 1 虛擬繼承 class a class b virtual public a class c virtual public a class d public c,public b int main int argc,c...