注意C中的struct和C++中的struct是不一样的,c中的struct比较原生,仅仅是将一些属性封装起来构成一个整体,没有OO的相关特性。而c++中的struct是对c中的struct进行扩展(兼容c中的struct),具备OO的特性,
其实c++中的class能干的事情struct几乎都能干, 什么继承、多态等都OK。直接看下面代码,不同编译器对结果可能不一样:
|
VisualStudio 2012默认debug和release结果:
G++ 4.5.3, 默认和O2(g++ -O2 structtest.cpp)结果:
mac下的g++(Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn))无优化和O2结果
不同编译器结果不一样主要是体现在printf函数实现(有空再研究下)下以及C c3的未初始化(注意c2和c3的区别)~ 这也告诉我们一定要注意初始化啊~未初始化的值是未定义的,啥结果可能都有。
可以看出:
区别关键就是访问控制,struct默认是public,class默认是private。包括struct下定义的属性/成员访问控制(默认public),继承方式默认public。几个注意的地方,struct还能继承class,class也能继承struct,一定条件下class也能像struct用{…}初始化构造.当struct/class带有OO特性时,如继承、构造函数、虚函数时,除了默认的访问控制符外,struct跟class行为完全一样。例子中的通过{…}提供参数化列表构造一个实例,class也能通过这样的方式构造。当有继承、构造函数等OO特性定义(非成员函数)时,即便是struct也不能通过{…}初始化构造.
另外,class在c++中还能在模版定义中,类似(typename),而struct不行。
以上算是struct和class的区别和联系吧。核心思想是记住c++中的struct也能用于OOP,与class的默认访问控制权限不一样。
- Reference : http://blog.sina.com.cn/s/blog_48f587a80100k630.html
- C# struct和class区别: http://www.cnblogs.com/gsk99/archive/2011/05/20/1904552.html