结构体和类的区别

版权声明:仅供参考与学习交流 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更适合看成是一个对象的实现体

参考文章:
C++中结构体与类的区别(struct与class的区别)

猜你喜欢

转载自blog.csdn.net/lym940928/article/details/88216173
今日推荐