C++ 结构体和类

C++ 结构体和类C 很久未用 有些遗忘 现在再复习一下 链接是孙鑫老师的 MFC 视频 里面有讲 C https www bilibili com video av p 2 首先是结构体 include iostream h include iostream usingnamespa 注释的地方和未注 iostream iostream h

C++ 很久未用,有些遗忘,现在再复习一下。。。。。

链接是孙鑫老师的MFC视频,里面有讲C++

https://www.bilibili.com/video/av/?p=2

首先是结构体:

#include 
  
    //#include 
   
     //using namespace std; //注释的地方和未注释的是一样的效果, struct Point{ //C语言结构体中是不可以有函数存在,而C++可以     public:     int x;     int y;     void output(){         cout< 
     
    
  

 然后是class 类

#include 
  
    class Point{ public: int x; int y; void init(){ x=0; y=0; } void output(){ cout< 
    
  

结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性。

  类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private)

  结构体中,对于未指定任何访问控制属性的成员,其访问控制属性为公有类型(public)

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

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

以上区别来源:https://www.cnblogs.com/Carrie-0173/p/6357715.html

 

构造函数

下面是一个带有构造函数的类

#include 
  
    class Point{ public: int x; int y; Point(){ //构造函数 x=0; y=0; } void output(){ cout< 
    
  

运行时会发现,虽然没有去调用赋值,它依然自动调用赋值,也就是说明运行类的时候,构造函数是自动一起运行的。

构造函数可以初始化其内部成员,构造函数重要的作用是创建对象本身,C++规定每一个类必须有一个构造函数(如果没有提供任何构造函数,那么C++会提供一个默认的构造函数,默认的构造函数是不带参数的构造函数,它只负责创建对象,而不进行任何初始化工作,如果一个类提供的构造函数,不管是否带参数,C++就不再提供默认的构造函数,也就是说一个类定义了一个带参数的构造函数,还想要一个不带参数的构造函数,则需自己定义),没有构造函数就不能创建任何对象。一个对象的产生就会占据一定的内存空间,而内存的分配就是由构造函数实现的。

析构函数

当一个对象的生命周期结束,需要将内存进行回收的时候,这就需要调用到析构函数来进行内存的释放

#include 
  
    class Point{ public: int x; int y; Point(){ //构造函数 x=0; y=0; } ~Point(){ //析构函数 } void output(){ cout< 
    
  

析构函数不允许又返回值,更重要的是析构函数中不允许带参数,并且一个类中只允许有一个析构函数。 

虽然构造函数和析构函数中也没有写到,内存的分配和释放,但是确起到了内存分配和释放的效果,这是由于,构造函数和析构函数是提供给系统调用的,具体操作由系统去完成。 

函数的重载

#include 
  
    class Point{ public: int x; int y; Point(){ //1 x=0; y=0; } Point(int a,int b){ //2 x=a; y=b; } //1和2是同名不同参的函数,这是重载 ~Point(){ } void output(){ cout< 
    
  

重载构成的条件,函数的参数类型和参数个数不同,才能构成重载。

比如:1 void output()和 2 int output(),由于参数个数一样,而不构成重载;

         1  void output(int a,int b=10) 和2  void output(int a),由于参数类型一样,而不构成重载。( void output(int a,int b=10)中第二个参数有一个缺省值,也就是不用去赋值的数,那么当传来一个参数时,1和2都可以被调用)

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214635.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:48
下一篇 2026年3月18日 下午3:48


相关推荐

  • 【本地部署实战Coze】扣子空间开源啦,看完少走冤枉路!

    【本地部署实战Coze】扣子空间开源啦,看完少走冤枉路!

    2026年3月12日
    2
  • sql文件导入数据库变乱码_sql文件导入数据库变乱码

    sql文件导入数据库变乱码_sql文件导入数据库变乱码由于最近在实习,往mysql数据库中导入sql文件,数据库中竟然显示乱码,数据库格式以及表格都设置为utf-8.不知为什么会这样?百度了好久并没有发现能有效的解决方法。于是自己尝试了一下自己的方法:①先将sql文件导入mysql数据库,乱码也不管。②将sql文件用写字板打开,代码复制一下,然后粘贴在mysql的可视化工具里的sql编译器里,如下图然后点击运行即可解决乱码现象。补充一下,我用的可视化工具有两个,MySQL-Front和workbench,亲测这两个都可以解决。后续有更

    2022年10月2日
    4
  • python画图函数

    python画图函数python画图函数

    2022年6月3日
    39
  • 使用RabbitMQ异步执行业务

    使用RabbitMQ异步执行业务RabbitMQ 即一个消息队列 主要是用来实现应用程序的异步和解耦 同时也能起到消息缓冲 消息分发的作用 使用 RabbitMQ 实现异步更新文章浏览量 提升阅读文章时的响应速度 从直接更新数据库耗时 450ms 到异步更新数据库耗时 50ms 明显提升接口性能 非常的 nice

    2026年3月19日
    2
  • primarykey的用法_什么是primarykey

    primarykey的用法_什么是primarykeyprimarykey是主键一般为自动增长并且是非空int类型的,主要用来保证数据的唯一性;Key是索引约束,对表中字段进行约束索引的,都是通过primaryforeignunique等创建的。常见有foreignkey,外键关联用的;MYSQL建立数据表时,KEY的设置有什么用?key是指关键字,在每一个表所有记录中唯一,普通的表一般可以省去这一项。另外,设置了

    2025年7月26日
    7
  • 西门子PLC连接SimatcNet OPC服务器

    西门子PLC连接SimatcNet OPC服务器西门子PLC连接SimatcNet你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带来全新的写…

    2022年6月20日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号