学C语言时,用struct来定义结构体,后来学C++的类,有时用struct有时用class,总会以为它们两个有很大的差别。
事实上在C++Primer 5th中文版p546中明确地指出了,class与struct在定义类时 唯一 的差别是 默认成员访问说明符及默认派生访问说明符。
一、默认成员访问说明符
class A
{
int a;
int b;
public:
int c;
private:
int d;
}
在未遇到说明符时,class的成员默认是private的,即a、b是private的。
struct A
{
int a;
int b;
public:
int c;
private:
int d;
}
在未遇到说明符时,struct的成员默认是public的,即a、b是public的。
二、默认派生访问说明符
在继承、派生时,class与struct的默认继承保护与前面的成员访问时类似。
class Base
{
/*……*/
};
struct D1 : Base
{
/*……*/
}
class D2 : Base
{
/*……*/
}
其中,D1默认为public继承, D2默认为private继承。
综上,只要处理好了private、public的不同,其他任何情况class与struct都可以随意选择一个使用。