版权声明:仅供参考与学习交流 https://blog.csdn.net/lym940928/article/details/88216173
简述
首先,非常重要的一点,C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它获得了很多功能:
- struct可以包含成员函数
- struct可以继承
- struct可以实现多态
struct与class最本质的一个区别是默认的访问控制:
- struct是public
- class是private
struct A
{
char a;
};
struct B : A
{
char b;
};
这个时候B是public继承A的。
如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。
平时写类继承的时候,通常会这样写:
class B : public A
就是为了指明是public继承,而不是用默认的private继承。
当然,到底默认是public继承还是private继承,取决于子类而不是基类。
即,struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。
struct A{};
class B : A{}; //private继承
struct C : B{}; //public继承
- struct作为数据结构的实现体,它默认的数据访问控制是public;
- class作为对象的实现体,它默认的成员变量访问控制是private的。
使用
到底是用struct还是class,完全看个人的喜好,原则上可以将程序里所有的class全部替换成struct,它依旧可以很正常的运行。
但是推荐:
- 当你觉得你要做的更像是一种数据结构的话,那么用struct;
- 如果你要做的更像是一种对象的话,那么用class。
总之,struct和class最本质的区别,是默认访问控制。
模板定义的差别
除了上面说的差别,二者还有一个差别:
- “class”这个关键字还用于定义模板参数,就像“typename”。
- 但关键字“struct”不用于定义模板参数。
总结
- struct更适合看成是一个数据结构的实现体。
- class更适合看成是一个对象的实现体。