初步入门C ++之类的概念
文章目录
- 0 Hello World!
- 1 编译过程
- 2 类
- 2.1 类的概念
- 2.2 构造函数与析构函数
0 Hello World!
#include <iostream> //相当于#include <stdio.h>int main(int argc, char argv[])
{char c;std::cout << "Hello World!\n" << std::endl; //std是一个标准库的命名空间,cout是其中的一个对象,代表标准输出流。//::表示作用域解析运算符(scope resolution operator)。 它用于访问某个命名空间或类中的成员。c = std::cin.get();std::cout << "You entered: " << c << std::endl;return 0;
}

1 编译过程
编译分为预处理,编译,汇编,链接四个基本过程,他们的作用如下:
-
预处理:预处理由预处理器 CPP 完成,它会将 .c 文件预处理为 .i 文件( .i 文件的本质还是一个 .c 文件)。预处理就是将预处理命令,宏等进行简单的展开和替换。预处理会将 #define 宏定义替换展开后删除,判断条件编译,将 #include<> 头文件复制粘贴进来,同时删除注释,添加行号和文件标识,还会保留 #pragma 编译器指令。
-
编译:编译由编译器 CC 完成,它会将 .i 文件变为 .s 文件。编译器首先会检查语法规则,然后将 C 语言翻译为等效的,优化后的汇编语言,我们语言的可移植性也从这里体现,对于不同的平台,我们只需要选择不同的编译器即可,这样,同一个 C++ 语言源代码,就能生成在不同平台上的汇编语言文件。(Ps:编译器的优化等级并不是越高越好,我们常用的配置是 OS,它约等于 O2 等级)。
-
汇编:汇编由汇编器 AS 完成,它会将 .s 文件汇编为 .o 文件( windows 下是 .obj 文件)。汇编就是将汇编语言转化为对应的二进制文件,也称目标文件,目标文件至少有代码段和数据段两段组成。
-
链接:链接由链接器 LD 完成。它会将 .o 目标文件通过链接变为 ELF 文件,即可执行文件。链接会将动态库或者静态库与本文件进行链接,我们在 #include<头文件> 的时候,头文件中只有函数的声明信息,那么函数体在哪里找呢,没错,就是在动态库和静态库里,而将这些库,声明联合到一起的过程,便称之为链接,链接是通过函数的签名来找到对应的函数体的,同时main函数的入口也是在这个时候确定下来的。
2 类
2.1 类的概念
简单来说,类是一种数据类型,其实就是数据与函数的结合体,在 C 语言中,若我们需要计算多个矩形的面积,我们一般会定义多个矩形的数据,然后调用相应的函数来计算他们:
int area(int x, int y)
{area = x * y;return area;
}int main(int argc, char* argv[])
{int x1,y1,area1;int x2,y2,area2;int x3,y3,area3;x1 = 2;y1 = 5;area1 = area(x1, y1);printf("area1:%d", area1);x2 = 4;y2 = 20;area2 = area(x2, y2);printf("area2:%d", area2);x3 = 30;y3 = 1;area3 = area(x3, y3);printf("area3:%d", area3);
}
但是在面向对象编程中,当我们有了类的概念后,就可以将数据与函数集合起来管理,如下:
#include <iostream>class rect
{
public: //类默认的变量是private私有的,为了让外面可以访问,我们使用使用public公开这些变量。int x;int y;int area;void area_printf(){area = x * y;std::cout << area << std::endl; return;}
};int main(int argc, char* argv[])
{rect rect1,rect2,rect3;rect1.x = 2;rect1.y = 5;rect1.area_printf();rect2.x = 4;rect2.y = 20;rect2.area_printf();rect3.x = 30;rect3.y = 1;rect3.area_printf();
}//我们解读一下这段代码:
- 定义一个类 rect ,其中包括 x,y,area 数据和一个 void area_printf() 的方法
- 可以看到该方法中需要 x,y,area 数据,但是我们并没有用形参传入 void area_printf,但是为什么可以正常运行呢?
- 因为这个类已经包含了这三个数据了,所以可以直接使用。
- 也就是说,我们每声明一个新的 rect 类,就会自动生成对应的 x,y,area 数据。在这个类里面的函数,也就是“方法”,就可以使用这些数据了,这也是为什么我们说,类其实就是,数据和函数的结合体。

2.2 构造函数与析构函数
之前我们了解到,在类中我们可以创建不同的函数,即不同的“方法”。那我们现在来思考一个问题,当我们创建一个新的类时,若里面有很多的数据需要初始化,我们可以写一个初始化的方法然后调用它,但是显然当类的数量多起来的时候,代码就会显得冗余了,但是c++为我们提供了构造函数与析构函数,构造函数会在类被创建时自动执行,这样就免去了我们调用它的过程,反之,当一个类被销毁时,我们往往需要释放其中 malloc() 的内存。那么在类被销毁时,自动调用的函数,就称为析构函数。
#include <iostream>class rect
{
public:int x;int y;int area;//以下是两个构造函数rect() //构造函数不需要返回值,也可以没有参数,创建 rect1,rect2,rect3 时会自动创建{x = 0;y = 0;}rect(int x_input, int y_input) //重载构造函数,即同名的函数,参数不一样{x = x_input;y = y_input;}void area_printf(){area = x * y;std::cout << area << std::endl;return;}//以下是析构函数~rect(){std::cout << "This Class Has Clean" << std::endl;}
};void test_function()
{rect rect1;rect rect2(2, 4);rect rect3(11, 9);rect1.area_printf();rect2.area_printf();rect3.area_printf();}//当函数退出时,创建的类会被销毁int main(int argc, char* argv[])
{test_function();return 0;
}

相关文章:
初步入门C ++之类的概念
文章目录 0 Hello World!1 编译过程2 类2.1 类的概念2.2 构造函数与析构函数 0 Hello World! #include <iostream> //相当于#include <stdio.h>int main(int argc, char argv[]) {char c;std::cout << "Hello World!\n" <<…...
什么是技术作家风格指南?
技术写作风格指南旨在提供必要的格式风格,以帮助技术作家为读者创建引人入胜且一致的内容。然而,技术写作与普通的自由写作有很大不同。目的是将复杂的技术主题分解为易于理解的内容,以帮助读者了解如何使用产品或服务。 在本文中࿰…...
WebGIS学习——Cesium|Javascript
1.Cesium学习什么:Cesium实战项目说明-CSDN博客 2.Cesium绘制图形(箭头等):Cesium 态势标绘 _cesium态势标绘-CSDN博客 3.CesiumThree集成 4.Cesium深度图相关:Cesium离屏渲染深度图实验_cesium 离屏渲染-CSDN博客 5.洪涝:cesium淹没分析…...
Qt,获取其他.exe文件的标准输出流的信息(printf/print的输出信息)
比如,通过Python编写爬虫软件功能是运行程序获取豆瓣电影排行榜信息,并通过print打印出来。将其打包成.exe,通过Qt来调用,并获取到.exe程序运行的结果 简单示例代码: // 创建 QProcess 对象QProcess process;// 连接信号槽以获取…...
LeetCode 热题 HOT 100 (010/100)【宇宙最简单版】
【链表】No. 0206 反转链表 【简单】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持…...
Ubuntu24.04安装mysql-server小计,解决mysql_secure_installation时不能重置密码的问题
Ubuntu24.04安装mysql-server小计,解决mysql_secure_installation时不能重置密码的问题 为什么要写这往篇文章? 一般情况下,我安装mysql都用源码编译,以此方便安装更多自定义插件,但这次只需要安装一台开发机&#x…...
unity3d:TabView,UGUI多标签页组件,TreeView树状展开菜单
概述 1.最外层DataForm为空壳编辑数据用。可以有多个DataForm,例如福利DataForm,抽奖DataForm 2.Menu层为左边栏层,每个DataForm可以使用不同样式的MenuForm预制体 3.DataForm中使用ReorderList,可排列配置 4.有定位功能…...
go语言map底层及扩容机制原理详解(下)
前言 上文对Go map的底层数据结构有所了解,并对其扩容机制的步骤进行简略的描述。本文将会详细地去解释Go map扩容机制的详细原理。 1. 触发扩容操作 在go语言中,当我们插入一个元素到hmap时,会有以下两种情况: 若元素存在&…...
网络协议二 : 使用Cisco Packet Traceer工具模拟网络环境,集线器,网桥,交换机,路由器,IP,同一网段
1. 安装 Cisco Packet Tracer baidu 网盘地址,感谢大神分享 安装,破解,中文化,都有说明,建议使用7.x的那个版本,感觉比8.x的翻译要完整一点 https://pan.baidu.com/s/18iWBOfhJJRhqgQqdNQcfMQ?pwddcch#…...
Aria2 任意文件写入漏洞
目录 Aria2介绍漏洞描述漏洞复现 Aria2介绍 Aria2是一个在命令行下运行,多协议,多来源下载工具(HTTP / HTTPS,FTP,BitTorrent,Metalink),内建XML-RPC用户界面。Aria提供RPC服务器&a…...
成为git砖家(4): git status 命令简介
1. untracked 和 tracked 状态 Remember that each file in your working directory can be in one of two states: tracked or untracked. Tracked files are files that were in the last snapshot, as well as any newly staged files; they can be unmodified, modified, o…...
2-48 基于matlab的EM算法聚类可视化程序
基于matlab的EM算法聚类可视化程序,通过期望最大化算法(EM)优化类别间距,使得类别间距最大、类内间距最小。输出聚类前后结果及收敛曲线。程序已调通,可直接运行。 2-48 期望最大化算法(EM) 聚类…...
k8s 使用技巧
文章目录 kubectlkubectl 自动补全kubectl 上下文和配置打印当前使用 API 调用过程生成yaml模板强制删除 Pod(即使处于Terminating) kubectl kubectl 自动补全 source < (kubectl completion bash) # setup autocomplete in bash, bash-completion …...
学习笔记-系统框图传递函数公式推导
目录 *待了解 现代控制理论和自动控制理论区别 自动控制系统的组成 信号流图 1、系统框图 1.1、信号线、分支点、相加点 1.2、系统各环节间的连接 1.3、 相加点和分支点的等效移动(比较点、引出点) 2、反馈连接公式推导 2.1、前向通路传递函数…...
C++ - 基于多设计模式下的同步异步⽇志系统
1.项目介绍 项⽬介绍 本项⽬主要实现⼀个⽇志系统, 其主要⽀持以下功能: • ⽀持多级别⽇志消息 • ⽀持同步⽇志和异步⽇志 • ⽀持可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中 • ⽀持多线程程序并发写⽇志 • ⽀持扩展不同的⽇志落地⽬标地 2.开发环境 • Cent…...
git 相关内容
...
ElasticSearch(es)倒排索引
目录 一、ElasticSearch 二、倒排索引 1. 正向索引 2. 倒排索引 具体细节 1. 文档分析 2. 索引构建 3. 索引存储 4. 词条编码 5. 索引优化 6. 查询处理 示例 总结 3. 正向和倒排 三、总结 倒排索引的基本概念 为什么倒排索引快 一、ElasticSearch Elasticsear…...
【自然语言处理】概论(一):自然语言处理概要
1.1 概论:(一)自然语言处理概要 知识点 自然语言的定义:人类交流使用的,包括口语和书面语的信息交流方式。AI的终极目标:使计算机具备理解(听、读)和生成(说、写&#…...
flask 开始
# 导入flask类 from flask import Flask,request,render_template # 使用flask类来创建一个app对象 # __name__ 代表当前app.py 这个模块 app Flask(__name__) # 创建一个路由和视图函数的映射 url http://127.0.0.1:5000/ app.route("/") def hello_word():return …...
仕考网:公务员可以报考军队文职吗?
公务员可以报考军队文职考试,但是需要满足前提条件。 对于已经与国家、地方的用人单位建立劳动关系的社会人才,在获得当前用人单位的许可后才可以申请报考。 在面试过程中,考生必须出示一份由其用人单位出具的且加盖公章的同意报考证明。一…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
