1. 程式人生 > >struct與class的區別

struct與class的區別

初始化列表 pri vat 對象 pub 但是 構造函數 lock nbsp

C++中的struct是對C中struct的擴充,它已經不再只是一個包含不同數據類型的數據結構,因為其擴充了太多功能。總的來說,C++中struct和class極其相似,比如,struct能包含成員函數、能繼承、能實現多態等。但是二者之間也存在著不可忽視的區別,如下:

1) 默認的繼承訪問權限不同。struct默認是public繼承,class默認是private繼承。

子類屬於哪種繼承取決於子類而不是基類,也就是說struct可以繼承class,class也可以繼承struct,默認的繼承訪問權限就取決於子類是struct還是class。如果不想使用默認的繼承方式,可以指明使用哪種繼承。如下:

struct A{};

class B : A{}; //private繼承

struct C : B{}; //public繼承


2) struct作為數據結構的實現體,它默認的數據訪問控制是public的,而class作為對象的實現體,它默認的成員變量訪問控制是private的。

雖然struct和class使用時基本可以互換,但是還是應該用struct處理更像數據結構的場景,用class處理更像對象的場景。


3) class關鍵字還用於定義模板參數,但是struct不用於定義模板參數


4) struct在定義時,如果內部沒有構造函數和虛函數,可以用{}賦初值(用初始化列表對數據進行按順序的初始化),而class不能這樣初始化,除非使用和struct一樣的public繼承。這裏struct體現出數據結構的特性,而不是類的特性。如果struct內部有構造函數或虛函數,那麽就無法使用{}賦初值,這時struct表現得更像class。


參考文獻:

1> C++中struct和class的區別

2> C++中struct和class的區別

struct與class的區別