当前位置: 代码网 > it编程>编程语言>C/C++ > C++中结构体与类的使用区别及说明

C++中结构体与类的使用区别及说明

2025年10月14日 C/C++ 我要评论
在参与以c++为编程基础的项目应用中总会遇到结构体类型与类的数据类型,但是其具体应用区别模糊不清现将其区别总结如下(先介绍c和c++中结构体的不同,再对比c++中结构体与类的区别)一、c和c++中结构

在参与以c++为编程基础的项目应用中总会遇到结构体类型与类的数据类型,但是其具体应用区别模糊不清

现将其区别总结如下(先介绍c和c++中结构体的不同,再对比c++中结构体与类的区别)

一、c和c++中结构体的不同

(1)c语言中的结构体不能为空,否则会报错

c语言中要求一个结构或联合至少有一个成员。c语言中,空结构体的大小为0,而c++中空结构体(属于空类)的大小为1

(2)c语言中的结构体只涉及到数据结构,而不涉及到算法

在c语言中数据结构和算法是分离的。换句话说就是c语言中的结构体只能定义成员变量,但是不能定义成员函数

然而在c++中既可以定义成员变量又可以定义成员函数, c++中的结构体和类体现了数据结构和算法的结合

不过虽然c语言的结构体中不能定义成员函数,但是却可以定义函数指针,不过函数指针本质上不是函数而是指针,所以总的来说c语言中的结构体只是一个复杂数据类型 ,只能定义成员变量,不能定义成员函数,不能用于面向对象编程

(3)c语言中定义结构变量时不可省略struct关键字,c++可以省略

在c语言中使用struct定义的结构体中在定义变量的时候,struct不能省略

但是在c++之中则可以省略struct

二、c++中结构体与类的区别

c++中的struct对c中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能

  • struct能包含成员函数吗? 能!
  • struct能继承吗? 能!!
  • struct能实现多态吗? 能!!!

既然这些它都能实现,那它和class还能有什么区别?

最本质的一个区别就是默认的访问控制: 

默认的继承访问权限struct是public的,class是private的

c++中,不使用结构体丝毫不会影响程序的表达能力。c++之所以要引入结构体,是为了保持和c程序的兼容性

但有时仍会在c++中使用结构体,是因为可以使用结构体将不同类型数据组成整体,方便于保存数据(若用类来保存,因类中成员默认为私有,还要为每个数据成员特定函数来读取和改写各个属性,比较麻烦)

struct可以继承class,同样class也可以继承struct

struct是一种数据结构的实现体,虽然它是可以像class一样的用。我依旧将struct里的变量叫数据class内的变量叫成员,虽然它们并无区别

三、总结

  • 概念:class和struct的语法基本相同,从声明到使用,都很相似,但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到
  • 类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异
  • 效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑
  • 关系:struct不仅能继承也能被继承 ,而且可以实现接口,不过class可以完全扩展。内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段

牛人总结:

(1) 在表示诸如点、矩形等主要用来存储数据的轻量级对象时,首选struct

(2) 在表示数据量大、逻辑复杂的大对象时,首选class

(3) 在表现抽象和多级别的对象层次时,class是最佳选择 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

  • 深入解析C++中的智能指针

    一、raii和智能指针raii是resource acquisition is initialization的缩写,它的意思是获取资源立即初始化。本质是⼀种利用对象生命周期来管理获…

    2025年10月19日 编程语言
  • C++构建缓存加速的实现示例

    C++构建缓存加速的实现示例

    1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于v... [阅读全文]
  • 详解C++中代理模式高级应用

    详解C++中代理模式高级应用

    1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于v... [阅读全文]
  • c++中类的对象初始化的实现示例

    c++中类的对象初始化的实现示例

    在 c++ 中,类的对象初始化是创建对象时为其成员变量赋予初始值的过程,核心依赖构造函数(类的特殊成员函数)。根据场景和需求,对象初始化有多种方式,下面详细介绍... [阅读全文]
  • 详解C++类型兼容性规则

    详解C++类型兼容性规则

    一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:派生类的对象可以被赋值给基类对象。 派生类的对象可以初始化基类的引用。 指向基类的指针... [阅读全文]
  • C++中stack和queue的用法及说明

    前言在 c++ 中,stack(栈)和 queue(队列)是两种常用的容器适配器,分别用于管理数据的后进先出(lifo)和先进先出(fifo)访问模式。本文将详细介绍这两种数据结构…

    2025年10月10日 编程语言

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com