【C++】类与结构体的区别

C++中结构体(struct)与类(class)的区别

C++中的 struct 对C中的 struct 进行了扩充,它不再是只能用来封装不同类型数据的数据结构了,它拥有了很多功能。例如:可以包含成员函数,可以继承,可以实现多态!!
那么,结构体和类的区别到底在哪?

1.最本质的一个区别就是:结构体的成员和成员函数在默认情况下都是公有的(public),类的成员和成员函数在默认情况下都是私有的(private)。
看下面的代码:

struct  A{
   char a;
}
struct B:A{
char b;
}

这里B是A的公有继承。
如果将struct改成class,那么B就是A的私有继承,这就是默认的继承访问权限。
如果想将B写成A的公有继承,则改为 class B:public A,这种继承方式会用的更多一些。

但是默认的继承方式与基类无关,是由继承中的子类决定的。
也就是说struct可以继承class,同样class也可以继承struct,所以默认的继承访问权限是看子类到底是struct还是class。看下面这段代码能更清楚一些:

struct A {};class B{};       //private 继承
class A {};struct B{};        //public 继承

虽然这里struct 与class 的用法差不多,但是struct 仍然是一种数据结构的实现体,而class 则是一个对象的实现体。所以习惯struct 体内的变量叫做数据,class 内的变量叫做成员。
这里我想说明一点,即使struct 与class 可以依靠默认的访问权限进行区分,但是我们仍然应该养成在自己的程序里写明的习惯,方便别人的阅读。

2.“class”这个关键字可用于定义模板参数,即“typename”。但关键字“struct”不能用于定义模板参数。
我之前写过模拟实现vector 的功能里用到过函数的模板,可参考https://blog.csdn.net/ly_6699/article/details/88386305这篇博客。

发布了213 篇原创文章 · 获赞 472 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览