C++中声明类的class与声明结构体的struct关键字详解
class
class关键字声明类类型或定义类类型的对象。
语法
[template-spec]
class[ms-decl-spec][tag[:base-list]]
{
member-list
}[declarators];
[class]tagdeclarators;
参数
template-spec
可选模板说明。
ms-decl-spec
可选存储类说明有关更多信息
tag
给定于类的类型名称。在类范围内的标记成为了保留字。标志是可选项。如果省略,定义匿名类。
base-list
此类派生其成员的类或结构的可选列表。
member-list
类成员列表。
declarators
指定类类型一个或多个实例名称的声明符列表。如果类的所有数据成员是public,声明符可以包含初始值设定项列表。
使用举例
//class.cpp
//compilewith:/EHsc
//Exampleoftheclasskeyword
//Exhibitspolymorphism/virtualfunctions.
#include<iostream>
#include<string>
#defineTRUE=1
usingnamespacestd;
classdog
{
public:
dog()
{
_legs=4;
_bark=true;
}
voidsetDogSize(stringdogSize)
{
_dogSize=dogSize;
}
virtualvoidsetEars(stringtype)//virtualfunction
{
_earType=type;
}
private:
string_dogSize,_earType;
int_legs;
bool_bark;
};
classbreed:publicdog
{
public:
breed(stringcolor,stringsize)
{
_color=color;
setDogSize(size);
}
stringgetColor()
{
return_color;
}
//virtualfunctionredefined
voidsetEars(stringlength,stringtype)
{
_earLength=length;
_earType=type;
}
protected:
string_color,_earLength,_earType;
};
intmain()
{
dogmongrel;
breedlabrador("yellow","large");
mongrel.setEars("pointy");
labrador.setEars("long","floppy");
cout<<"Codyisa"<<labrador.getColor()<<"labrador"<<endl;
}
struct
struct关键字定义结构类型和/或结构类型的变量。
[template-spec]struct[ms-decl-spec][tag[:base-list]]
{
member-list
}[declarators];
[struct]tagdeclarators;
参数
与class的参数相同,可以参照上面的。
备注
结构类型是用户定义的复合类型。它由可具有不同类型的字段或成员构成。
在C++中,结构与类相同,只不过其成员默认为public。
使用结构
在C中,你必须显式使用struct关键字来声明结构。在C++中,你不需要在定义该类型之后使用struct关键字。
可以选择在定义结构类型时,通过在右大括号和分号之间放置一个或多个逗号分隔的变量名称来声明变量。
可以初始化结构变量。每个变量的初始化必须括在大括号中。
有关相关信息,请参阅class、union和enum。
示例
#include<iostream>
usingnamespacestd;
structPERSON{//DeclarePERSONstructtype
intage;//Declaremembertypes
longss;
floatweight;
charname[25];
}family_member;//DefineobjectoftypePERSON
structCELL{//DeclareCELLbitfield
unsignedshortcharacter:8;//00000000????????
unsignedshortforeground:3;//00000???00000000
unsignedshortintensity:1;//0000?00000000000
unsignedshortbackground:3;//0???000000000000
unsignedshortblink:1;//?000000000000000
}screen[25][80];//Arrayofbitfields
intmain(){
structPERSONsister;//Cstylestructuredeclaration
PERSONbrother;//C++stylestructuredeclaration
sister.age=13;//assignvaluestomembers
brother.age=7;
cout<<"sister.age="<<sister.age<<'\n';
cout<<"brother.age="<<brother.age<<'\n';
CELLmy_cell;
my_cell.character=1;
cout<<"my_cell.character="<<my_cell.character;
}
//Output:
//sister.age=13
//brother.age=7
//my_cell.character=1