C++中class與struct的區(qū)別

字號(hào):

關(guān)于使用大括號(hào)初始化
    class和struct如果定義了構(gòu)造函數(shù)的話,都不能用大括號(hào)進(jìn)行初始化
    如果沒(méi)有定義構(gòu)造函數(shù),struct可以用大括號(hào)初始化。
    如果沒(méi)有定義構(gòu)造函數(shù),且所有成員變量全是public的話,可以用大括號(hào)初始化。
    關(guān)于默認(rèn)訪問(wèn)權(quán)限
    class中默認(rèn)的成員訪問(wèn)權(quán)限是private的,而struct中則是public的。
    關(guān)于繼承方式
    class繼承默認(rèn)是private繼承,而struct繼承默認(rèn)是public繼承。
    且看如下代碼(看看編譯器給出的錯(cuò)誤信息):
    class T1
    {
    public:
    void f()
    {
    cout<<"T1::f()"<    }
    int x,y;
    };
    struct T2
    {
    int x;
    void f(){cout<<"T2::f()"<    };
    struct TT1 : T1
    {
    };
    class TT2 : T2
    {
    };
    int main()
    {
    TT1 t1;
    TT2 t2;
    t1.f();
    t2.f();
    }
    關(guān)于模版
    在模版中,類型參數(shù)前面可以使用class或typename,如果使用struct,則含義不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是類型參數(shù)。
    template
    void f(X x)
    {
    }
    //出錯(cuò)信息:d:codecpptestcpptestcpptest.cpp(33) : error C2065: 'X' : undeclared identifier