linux系统中C++中构造与析构函数以及this的使用方法

news2024/11/20 20:34:07

大家好,今天主要和大家聊一聊,C++里面的基本语法结构以及对应的操作方法。

目录

第一:构造函数与析构函数

第二:this指针

第一:构造函数与析构函数

       什么是构造函数?构造函数在对象实例化时被系统自动调用,仅且调用一次,构造函数出现在哪里?前面学过类,实际上定义类时,如果没有定义构造函数和析构函数,编译器就会生成一个构造函数和析构函数,只是这个析构函数和构造函数什么事情也不做,所以我们不会关注到这一点。

构造函数的特点如下:

        1、构造函数必须与类同名;

        2、可以重载;

        3、没有返回类型,即使是void也不行;

        什么是析构函数?与构造函数相反,在对象结束其生命周期时系统自动执行析构函数。实际上定义类时,编译器会生成一个析构函数。

         1、析构函数的格式为 ~类名();

         2、调用释放内存(资源);

         3、~类名()不能加参数;

         4、没有返回值,即使void也不行

          通过简单的例子来说明构造函数和析构函数的使用方法:

#include <iostream>
#include <string>
using namespace std;

class Dog
{
    public:
       Dog();
       ~ Dog();
};


int main()
{
    Dog dog;
    cout<<"构造与析构函数示例"<<endl;
    return 0;
}

Dog::Dog()
{
    cout<<"构造函数执行!"<<endl;
}

Dog::~Dog()
{
    cout<<"析构函数执行!"<<endl;
}

      分析:其实执行的结果可以预测,在对象实例化时会调用构造函数,所以构造函数先执行,然后再执行main()函数中的内容,继续执行cout<<"构造函数与析构函数",最后结束的时候运行析构函数。

第二:this指针

        一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码,那么
成员函数如何知道要访问哪个对象的数据成员呢? 没错,就是通过 this 指针。每个对象都拥有一个 this 指针, this 指针记录对象的内存地址。在 C++ 中, this 指针是指向类自身数据的指针,简单的来说就是指向当前类的当前实例对象。
关于类的 this 指针有以下特点:
(1) this 只能在成员函数中使用,全局函数、静态函数都不能使用 this 。实际上,成员函数
默认第一个参数为 T * const this 。也就是一个类里面的成员了函数 int func(int p) func 的原
型在编译器看来应该是 int func(T * const this,int p)
(2) this 在成员函数的开始前构造,在成员函数的结束后清除。
(3) this 指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全
局变量。
#include <iostream>
#include <string>
 using namespace std;

class Dog
{
 public:
 string name;
 void func();
};

 int main()
 {
 Dog dog;
 dog.func();
 return 0;
}

 void Dog::func()
 {
   this->name = "旺财";
   cout<<"小狗的名字叫:"<<this->name<<endl;
}

分析:this只能能够在成员函数中使用,并可以指向自身数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xshell连接Linux一直失败解决方法

文章目录解决对象方法配置防火墙关闭Linux防火墙关闭Windows防火墙xshell连接Linux一直失败解决方法 解决对象 可能出现以下两个问题&#xff1a; Linux防火墙已关闭和Windows防火墙已经关闭配置好 vim /etc/sysconfig/network-scripts/ifcfg-ens33 方法 配置 这个是最容易…

linux系统中实现C++中继承和重载的方法

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何实现C中继承和重载的功能。 第一&#xff1a;C中的继承功能 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#xff0…

CLRNet: Cross Layer Refinement Network for Lane Detection

Paper name CLRNet: Cross Layer Refinement Network for Lane Detection Paper Reading Note URL: https://arxiv.org/pdf/2203.10350.pdf TL;DR CVPR 2022 文章&#xff0c;自动驾驶公司飞步科技与浙大联合出品。lane anchor-based 方案&#xff0c;在多个数据集上取得 …

Linux中的哈希表:基于双链表的内核模块

1. 前言Linux内核中选取双向链表作为其基本的数据结构&#xff0c;并将其嵌入到其他的数据结构中&#xff0c;使得其他的数据结构不必再一一实现其各自的双链表结构。实现了双链表结构的统一&#xff0c;同时可以演化出其他复杂数据结构。本文对linux中基于双链表实现的哈希表进…

java springboot+mybatis电影售票网站管理系统前台+后台设计和实现

java springbootmybatis电影售票网站管理系统前台后台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

RS—|遥感数字图像处理编程练习(python)

目录一&#xff1a;模拟计算图像直方图和累计直方图二&#xff1a;计算图像的均值、标准差、相关系数和协方差三&#xff1a;利用模板进行卷积运算四&#xff1a;获取彩色图像的直方图五&#xff1a;图像直方图均衡化一&#xff1a;模拟计算图像直方图和累计直方图 ① 调用的p…

【雷达入门 | FMCW毫米波雷达系统的性能参数分析】

本文编辑&#xff1a;调皮哥的小助理 FMCW毫米波雷达系统的性能参数主要包含&#xff1a; (1)距离估计、距离分辨率、距离精度、最大探测距离; (2)速度估计、速度分辨率、速度精度、最大不模糊速度&#xff1b; (3)角度估计、角度分辨率、角度精度、最大角度范围。 分析以及…

微服务框架SpringCloud从入门到通神(持续更新)

SpringCloud——>SpringBoot——>JavaWeb 微服务技术栈导学1 哔站up黑马程序员主讲老师&#xff0c;一上来就给介绍了SpringCloud出现的背景&#xff1a;微服务是分布式架构的一种&#xff0c;分布式架构就是要把服务做拆分&#xff0c;而SpringCloud只是解决了服务拆分式…

FTP协议原理简析

FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。21端口用于建立控制连接&#xff0c;并传输FTP指令。20端口用于建立数据连接&#xff0c;传输数据流。 一&#xff1a;FTP功能简介 1&#xff1a;FTP服务器能够进行档案的传输与管理功能&#xff1b; 2&#xff1a;可以…

招生简章 | 欢迎报考中科院空天院网络信息体系技术重点实验室(七室)

官方公众号链接&#xff1a;招生简章 | 欢迎报考中科院空天院网络信息体系技术重点实验室&#xff08;七室&#xff09; 招生简章 | 欢迎报考中科院空天院网络信息体系技术重点实验室&#xff08;七室&#xff09; 中国科学院空天信息创新研究院&#xff08;简称空天院&#x…

【实战篇】38 # 如何使用数据驱动框架 D3.js 绘制常用数据图表?

说明 【跟月影学可视化】学习笔记。 图表库 vs 数据驱动框架 图表库只要调用 API 就能展现内容&#xff0c;灵活性不高&#xff0c;对数据格式要求也很严格&#xff0c;但方便数据驱动框架需要手动去完成内容的呈现&#xff0c;灵活&#xff0c;不受图表类型对应 API 的制约…

Smart Finance成为火必投票竞选项目,参与投票获海量奖励

最近&#xff0c;Huobi推出了新一期的“投票上币”活动&#xff0c;即用户可以通过HT为候选项目投票&#xff0c;在投票截止后&#xff0c;符合条件的优质项目将直接上线Huobi。而Smart Finance成为了新一期投票上币活动的竞选项目之一&#xff0c;并备受行业关注&#xff0c;与…

C++ 命令模式

什么是命令模式&#xff1f; 将请求转换为一个包含与请求相关的所有信息的独立对象。从而使你可以用不同的请求方法进行参数化&#xff0c;并且能够对请求进行排队、记录请求日志以及撤销请求操作。命令模式属于行为设计模式 如何理解命令模式 命令模式很像我们订外卖&#…

Hudi(10):Hudi集成Spark之并发控制

目录 0. 相关文章链接 1. Hudi支持的并发控制 1.1. MVCC 1.2. OPTIMISTIC CONCURRENCY 2. 使用并发写方式 3. 使用Spark DataFrame并发写入 4. 使用Delta Streamer并发写入 0. 相关文章链接 Hudi文章汇总 1. Hudi支持的并发控制 1.1. MVCC Hudi的表操作&#xff0c;如…

阿里云 EDAS Java服务日志中打印调用链TraceId

最近要搭建阿里云的日志服务SLS&#xff0c;收集服务日志&#xff0c;进行统一的搜索查询。但遇到一个问题如何在日志中打印链路的TraceId&#xff0c;本文章记录一下对EDAS免费的解决方法。 先看一下阿里官方文档 业务日志关联调用链的TraceId信息 从文档上看&#xff0c;想要…

基于SSM的资源发布系统

项目介绍&#xff1a; 该系统基于SSM技术&#xff0c;数据层为MyBatis&#xff0c;数据库使用mysql&#xff0c;MVC模式&#xff0c;B/S架构&#xff0c;具有完整的业务逻辑。系统共分为管理员&#xff0c;用户两种角色&#xff0c;主要功能&#xff1a;登陆注册&#xff0c;用…

数据结构:跳表

文章目录跳表跳表的由来单链表的查找效率太低提高单链表的查找效率跳表的时间复杂度分析跳表的空间复杂度分析跳表的插入操作跳表的删除操作跳表索引动态更新跳表 对链表进行改造&#xff0c;在链表上加多级索引的结构就是跳表&#xff0c;使其可以支持类似“二分”的查找算法。…

Redis查询之RediSearch和RedisJSON讲解

文章目录1 Redis查询1.1 RedisMod介绍1.2 安装Redis1.3 RediSearchRedisJSON安装1.3.1 下载安装1.3.2 修改配置1.4 RedisJSON操作1.4.1 基本操作1.4.1.1 保存操作JSON.SET1.4.1.2 读取操作JSON.GET1.4.1.3 批量读取操作JSON.MGET1.4.1.4 删除操作JSON.DEL1.4.1.5 其他命令1.4.1…

鲲鹏Bigdata pro之Hive的基本操作(创建表、查询表)

1 介绍 本文主要依据《鲲鹏Bigdata pro之Hive集群部署》实验教程上的Hive操作例子讲解&#xff0c;方便大数据学员重用相应的操作语句。同时对实验过程中出现的问题给以解决方法&#xff0c;重现问题解决的过程。以让大家认识到&#xff0c;出现问题很正常&#xff1b;同时&am…

Java设计模式中接口隔离原则是什么?迪米特原则又是什么,啥又是合成复用原则,这些又怎么运用

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 3.5 接口隔离原则 3.5.1 特点 使用的类不应该被迫依赖于不想使用的方法&#xff0c;应该依赖接口方法 3.5.2 案例(安全门) 防火功能代码 public interface Fi…