标签:c++
本文主要讨论class与struct的区别。为什么是区别而不是共同点呢?因为在绝大部分情况下,class和struct其实是可以互相替换的,
那么区别到底有哪些呢,我总结了一下大概有如下3点:
1、成员的默认访问权限不同。如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的;相反,如果我们使用class关键字,则这些成员是private的。
class A //class { int x; public: A():x(0){} }; struct B<span style="white-space:pre"> </span>//struct { int x; public: B():x(0){} }; int main() { A a; cout << a.x << endl;//class不可以 B b; cout << b.x << endl;//struct可以 }
2、默认的继承保护级别不同。默认情况下,使用class关键字定义的派生类是私有继承的;而使用struct关键字定义的派生类是公有继承的。
class A { public: int x; A():x(0){} }; class SonA:A{}; struct B { public: int x; B():x(0){} }; struct SonB:B{}; int main() { SonA a; cout << a.x << endl;//class不可以 SonB b; cout << b.x << endl;//struct可以 }
3、在定义模板的时候只能使用class而不能用struct
template<class T> class A //可以 template<struct T> class B//不可以
除此之外,class与struct基本上用法就是相同的。在C++中,class的特性如成员函数、继承、虚函数等也能在struct上实现。
与此同时,可以参考《Inside The C++ Object Model》P15的内容和《C++primer》P546 所阐述的“ 人们常常有一种错觉,认为在使用struct关键字和class关键字定义的类之间还有更深层次的差别。事实上,唯一的差别就是默认成员访问说明符及默认派生访问说明符;除此之外,再无其他不同之处。”
标签:c++
原文地址:http://blog.csdn.net/u014111471/article/details/46523449