C++中struct和class关键字的区别
对于这个问题很多人会说:struct和class除了“默认的成员访问权限”这一点不同外,没有任何区别(P141,摘自《高质量程序设计指南C++/C语言》第3版,修订版),即struct里的默认的成员访问权限是public,而class则是private。
其实,仔细看看《C++ Primer》(第4版),在485页,写道:
“唯一的不同只是默认的成员保护级别和默认的派生保护级别,没有其他区别”。
很多人忽视了struct和class在默认派生访问权限的区别。
下面代码说明了struct和class在默认继承方式的不同。
class Base {
public:
int data;
};
class Private_Derived : Base {
int test() {
return data;
}
};
// Use struct instead of class
struct Public_Derived : Base {
int test() {
return data;
}
};
class Derived_From_Private : Private_Derived {
int test() {
// Error: can't access Base::data
return data;
}
};
class Derived_From_Public : Public_Derived {
int test() {
return data;
}
};
由于Private_Derived类将Base类的data的访问权限转成private后,所以Derived_From_Private类继承Private_Derived类,就使用不了data成员变量,编译会出错。
参考资料:
1、《C++ Primer》(第4版),P485