在C++ 中,有的时候我们会见到用struct保留字来修饰一个类,这和用class来修饰一个类有什么区别呢?
看下面的代码:
struct A
{
int a;
string str_a;
}
class B
{
int b;
string str_b;
}
区别1:默认成员的访问级别不同,如果用struct保留字来定义一个类,那么struct中的成员默认是 public型的,比如上面定义的struct A,所以它的成员 a 和 str_a 是可以被外部成员访问的。如果是用class来定义一个类,那么class中的成员默认是private型的,比如上面定义的class B,所以在B中的成员 b和 str_b是不能外部成员访问的,也就说B类中的成员是私有的。
区别2:默认继承保护级别不同,使用class定义的派生类默认具有Private继承,而使用struct 定义的派生类默认具有public继承。
如下代码:
class CBase
{
public:
void display()
{
cout<<" CBase"<<endl;
}
}
struct CBase_struct : CBase
{
}
class CBase_class : CBase
{
}
void main()
{
CBase_struct CBS;
CBase_class CBC;
CBS.display(); // 正确,因为缺省时它是以public方式继承基类,所以display仍是该类的Public成员。
CBC.display(); //错误,因为缺省以Private方式继承基类,所以display方法在该类中将作为Private成员函数。因此该类的对系那个不能访问。
}
以上简单说明了struct和class在C 中的主要区别,当然,在C语言struct很少见到它的成员是函数,我们在C语言中已习惯了struct作为数据集来使用,而在c 中,用struct来定义一个类也是很少见的。另外在编译机制上struct 和class也存在很大差别,比如struct是没有构造函数、析构函数、赋值构造函数的机制。在这里就不详细解说了。
本文探讨了C++中struct与class的区别,包括成员访问级别及默认继承保护级别的不同。通过实例说明了struct默认成员为public,而class默认成员为private;struct默认public继承,而class默认private继承。
172

被折叠的 条评论
为什么被折叠?



