#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...