關(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
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