《C++程序设计》阅读笔记【6--类(1)】

news2024/12/25 9:12:44

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:《C++程序设计》阅读笔记

本文对应的PDF源文件请关注微信公众号程序员刘同学,回复C++程序设计获取下载链接。


  • 1 类
    • 1.1 概述
    • 1.2 构造函数
    • 1.3 析构函数
    • 1.4 重载构造函数
  • 2 总结


1 类

1.1 概述

::叫作用域区分符,指明一个函数属于哪个类或一个数据属于哪个类。::可以不跟类名,表示全局数据或全局函数(即非成员函数)。

例如:

image-20240229184337682

TIP:函数声明一般在头文件,但是函数定义不能在头文件。

解释:函数声明通常放在头文件(.h文件)中。这样,在程序的其他部分,如不同的源文件,就可以通过包含头文件来知道函数的接口(函数名称、参数类型和返回类型)而无需知道具体实现细节。函数定义通常放在源文件(.c或.cpp文件)中。这是因为如果把函数定义放在头文件中,当头文件被多个源文件包含时,就会导致多重定义的问题。

一个类对象所占据的内存空间由它的数据成员所占据的空间总和所决定。类的成员函数不占据对象的内存空间。

解释:成员函数的代码是所有对象共享的,它们在类的代码段中,而不会在每个对象中复制一份。但是每个类的数据成员都是不同的,因此要为其分配空间存储。

在类的对象调用成员函数时,除了接受实参外,还接受了一个对象的地址。这个地址被一个隐含的形参this指针所获取,它等同于执行this=&s。所有对数据成员的访问都隐含地被加上前缀this->。所以调用共享的代码段但是却可以操作自己的数据。所有的非静态数据函数都隐含this指针。

类中的成员默认是私有(private)

稍微注意一下:类内初始值,也就是在类定义到时候给它初始化:

image-20240316162521793

在类定义内部定义的成员函数会被隐式地声明为内联函数

构造函数也可以是内联函数

注意:当成员函数在类中声明,但是在类外实现时,它就不是内联函数(但是它依然具有类作用域)

1.2 构造函数

注意一下构造函数的创建先后的问题:

#include<iostream>
using namespace std;

class stu{
public:
	stu(){
		cout<<"stu"<<endl;
	}
};

class teach{
public:
	teach(){
		cout<<"teach"<<endl;
	}
};

class tutor{
public:
	tutor(){
		cout<<"tutor"<<endl;
	}
	
	stu s;
	teach t;
};

int main(){
	tutor t;
	return 0;
}

结果:

image-20240229203828178

解释:

主函数运行开始时,遇到要创建tutor类的对象,于是调用其构造函数tutor(),该构造启动时,首先分配对象空间(包含一个stu对象、一个 teach对象,然后根据在类中声明的对象成员的次序依次调用其构造函数。这里先调用stu()构造兩数,再调用 teach()构造函数,最后才执行它自己的构造函数的函数体。按照这个顺序,分别产生运行结果的第一、第二、,第三行输出。

注意一下一个简单的知识点:委托构造函数

//Clock类的两个构造函数:
Clock(int newH, int newM, int newS) : hour(newH),minute(newM),  second(newS)  {	//构造函数
}
Clock::Clock(): hour(0),minute(0),second(0) { }//默认构造函数

那么,默认的构造函数可以这样写:

Clock(): Clock(0, 0, 0) { } //委托构造函数

1.3 析构函数

析构函数是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。它只是在类对象生命期结束的时候,由系统自动调用。

构造函数不同于析构函数,它可以有参数,可以重载

析构函数调用的顺序:正好和构造函数相反(先构造则先入栈,那么析构时就后出栈)

#include<iostream>
using namespace std;

class stu{
public:
	stu(){
		cout<<"stu"<<endl;
	}
	~stu(){
		cout<<"~stu"<<endl;
	}
};

class teach{
public:
	teach(){
		cout<<"teach"<<endl;
	}
	~teach(){
		cout<<"~teach"<<endl;
	}
};

class tutor{
public:
	tutor(){
		cout<<"tutor"<<endl;
	}
	~tutor(){
		cout<<"~tutor"<<endl;
	}
	stu s;
	teach t;
};

int main(){
	tutor t;
	return 0;
}

结果:

image-20240229204722953

TIP:

当主函数运行到结束的大括号处时,析构函数依次被调用。

1.4 重载构造函数

值得注意的知识点:

这四个重载的构造函数可以通过函数重载合为一个函数

image-20240229212512232

也就是:

image-20240229212612549

2 总结

C++,犹如编程的交响乐, 在代码的海洋中奏响和谐的旋律。

它是创造者的笔,雕刻着无尽可能,

是思想的翅膀,让梦想飞翔的天空。

无拘无束,灵活多变。

C++,是程序员心中的宝藏,永不凋零的花朵。

渴望挑战C++的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多C++的奇迹吧。我们推出了引领趋势的💻C++专栏:《C++程序设计》阅读笔记,旨在深度探索C++的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

谷歌建站用什么程序比较好?

建网站这回事&#xff0c;说容易也容易&#xff0c;现如今市面上建站的程序多如牛毛&#xff0c;哪怕你不会代码也能建一个漂亮的网站&#xff0c;但网站搭建出来是为了什么&#xff1f;是为了获取流量&#xff0c;拉到业务&#xff0c;那么&#xff0c;建站的时候你就要考虑谷…

关于泛型类型参数的约束

默认情况下&#xff0c;泛型类型参数T可以是任意类型&#xff1b;如果我们希望泛型类型参数希望是某个类型或者是实现某个接口&#xff0c;或者继承某个类&#xff0c;又或者是某一个类型比如值类型&#xff0c;这就需要对类型参数T进行约束&#xff0c;泛型类型参数的约束语法…

二维码门楼牌管理应用平台建设:场所记录与智能化管理

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的建设意义四、结语 前言 随着科技的飞速发展&#xff0c;二维码技术已经深入到了我们生活的方方面面。在城市管理中&#xff0c;二维码门楼牌管理应…

如何使用宝塔面板搭建MySQL数据库并实现无公网IP远程访问

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

jeecg-boot 3.6使用微服务启动详细配置

1&#xff1a;运行sql文件 2&#xff1a;配置host 路径如下 127.0.0.1 jeecg-boot-redis 127.0.0.1 jeecg-boot-mysql 127.0.0.1 jeecg-boot-nacos 127.0.0.1 jeecg-boot-gateway 127.0.0.1 jeecg-boot-system 127.0.0.1 jeecg-boot-xxljob 127.0.0.1 jeecg-boot-rabbitmq 3…

Databend 开源周报第 139 期

&#x1f4e2; Databend 现已默认启用全新聚合哈希表实现&#xff0c;在 Hits 基准测试中单条查询性能提升最高达 40% &#xff01; Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://…

WPF 多语言切换及ResourceDictionary的Source路径填写

WPF 多语言切换 1. 添加资源字典 新增两个资源字典&#xff0c;里面分别存储不同语言的文本 <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s…

✌2024/4/4—力扣—整数转罗马数字

代码实现&#xff1a; 方法一&#xff1a;硬编码数字 const char *thousands[] {"", "M", "MM", "MMM"}; const char *hundreds[] {"", "C", "CC", "CCC", "CD", "D",…

SpringBoot学习之Kibana下载安装和启动(Mac版)(三十二)

一、简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。 …

橘子学JDK之JMH-02(BenchmarkModes)

一、案例二代码 这次我们来搞一下官网文档的第二个案例&#xff0c;我删除了一些没用的注释&#xff0c;然后对代码做了一下注释的翻译&#xff0c;可以看一下意思。 package com.levi;import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; import …

深入理解JVM后端优化技术-方法内联

相关系列 深入理解JVM后端优化技术-逃逸分析(Escape Analysis)-CSDN博客 深入理解JVM后端优化技术-锁消除&#xff08;Lock Elision)-CSDN博客 深入理解JVM后端优化技术-锁粗化(Lock Coarsening)-CSDN博客 jvm只是负责依次将字节码指令逐次转换成机器码。而在转换过程中&#x…

智能电表(AMI):革新电力行业的利器

近年来&#xff0c;随着电力行业的不断发展和科技的进步&#xff0c;智能电表&#xff08;AMI&#xff09;作为一种新型的电能测量设备&#xff0c;逐渐引起了人们的关注。AMI不仅具有传统电表的计量功能&#xff0c;还具备远程通信、数据采集、实时监测和多种数据分析等多功能…

(3)(3.1) 英特尔Realsense深度摄像头(二)

文章目录 前言 5 配置ArduPilot 6 地面测试&#xff1a;飞行前验证 7 飞行测试 8 实验 9 数据闪存记录 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用&#xff0c;以实现避障(obstacle avoidance)。该方法使用在…

Linux(CentOS7)部署 y-api 接口管理平台

目录 前言 前置环境 mongodb node 安装 y-api 部署页面 启动 y-api 基本使用教程 前言 前后端分离时代&#xff0c;前后端通过接口文档来协作开发项目。一般开发过程中&#xff0c;由后端先编写接口文档&#xff0c;然后交付给前端&#xff0c;这时候前后端都根据这个…

Linux/Lame

Lame 今天随便乱逛发现这台机器貌似是 HackTheBox 平台的第一台机器&#xff0c;而且我还没做过&#xff0c;从简介上来看的话是一台很简单的机器&#xff0c;快快的玩一下 Enumeration nmap 首先用 nmap 扫描一下常见的端口&#xff0c;发现系统对外开放了 21,22,139,445 端…

如何在CentOS安装Nexus容器无公网IP远程管理本地仓库

文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus Nexus是一个仓库管理工具&#xff0c;用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关&#xff0c;可…

免费专利下载网站(亲测有效!无需注册登录)

1.中国专利全文下载 本数据库收录了自1985年以来的全部中国专利数据摘要及全文&#xff0c;包括中国专利申请公开说明书、授权公告说明书&#xff0c;涵盖全部发明专利、实用新型专利、外观设计专利。药物在线已开发中国专利全文下载极速版!支持专利全文在线浏览&#xff0c;专…

Django交易商场

Hello&#xff0c;我是小恒不会java 最近学习django&#xff0c;写了一个demo,学到了不少东西。 我在GitHub上开源了&#xff0c;提示‘自行查看代码&#xff0c;维护&#xff0c;运行’。 最近有事&#xff0c;先发布代码了&#xff0c;我就随缘维护更新吧 介绍&#xff1a; 定…

计算机的发展趋势

本文 我们来说计算机的发展趋势 目前来讲 计算机是朝着 巨型化 微型化 网络化 智能化发展 巨型化 指功能巨型化 是指其高速运算、大存储容量和强功能的巨型计算机。其运算能力一般在每秒百亿次以上、内存容量在几百兆字节以上。 主要用于航空航天、军事、气象、人工智能、生…

FME学习之旅---day21

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;AutoCAD 变换 相关的文章 为您的 DWG 赋予一些样式&#xff1a;使用 DWGStyler、模板文件、块等 FME数据检查器在显示行的方式上受到限制。它只能显示线条颜色&#xff0c;而…