C++笔记之编译过程和面向对象

news2024/12/28 5:37:11

回顾: 

“abcd”//数据类型

字符串常量

const  char *p="abc"; 

new  STU

const   char *//8   指针的内存空间

int

float

指针的内存空间 p

指针指向的内存空间 "abc" 取决于字符串长度

指针变量的内容一级指针

指针变量的地址二级指针

const char *p="abc";

new申请空间 指针变量指向的内容

new完返回申请到的空间的首地址

molloc-》void*

 结构体中的指针

结构体内含有指针成员。

堆区结构体变量要先为结构体申请空间,然后为结构体里的指针申请空间;

释放的时候先释放结构体里的指针申请的空间,然后释放为结构体申请的空间。

栈区为结构体里的指针申请空间;

释放结构体里的指针申请的空间

拆房子

小盒子??? 内存泄漏

大房子(结构体)-》小盒子(name)

结构体和函数

结构体普通变量做函数参数

也是值传递,在函数内修改形参,不会影响外界实参

add(int a)(a)

add(int *a)(&a)

结构体指针变量做函数参数 

 地址传递,形参就是实参

char arr[10]="abc";

scanf("%s",arr);

结构体数组名做函数参数

地址传递

Int arr[10]  10  int

STU arr[10] 10 STU

结构体的大小 

只有成员变量占内存空间

而成员函数是不占内存空间的。

结构体变量占用的内存空间永远是所有成员中占用内存最大成员的整数倍(对齐问题)。

占用内存最大属性是score,占8个字节所以第一次会分配8个字节

将第一次分配的8个字节分配给age4个,分配给ch1个,含剩下3个字节

当需要分配给score时,发现只剩下3个字节,所以会再次开辟8个字节存储空间

一共开辟了8个字节空间,所以最终p占用16个字节 

联合 (共用体)

在C++中,有一个和结构体十分类似的数据类型,叫联合。与结构体相比,它更省内存空间。

union  联合名

{

   类型1    成员名1;

   类型2    成员名2;

    ....

   类型n    成员名n;

};

联合体所占的内存长度等于其最长成员的长度,也有叫做共用体;

共用体变量的地址和它的各成员的地址都是同一地址。

struct 3 三室一厅 abc

共用体 a

 同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用;

共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖;

大端存储和小端存储

枚举

enum  枚举名

{

    枚举元素1,

     枚举元素2,

     .......

枚举元素的值取决于定义时各枚举元素排列的先后顺序。

默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1.

也可以在定义枚举类型时改变枚举元素的值 

代码不重要-》

思路-》

转化代码(语法)

C++程序的组成

1.预处理指令

#include<iostream>

全局声明和定义

函数      exit()

语句和表达式    a+b

if(a+b>0)

a+b;

内存管理

异常处理

C++程序中的预处理指令以井号(#)开头

如#include等

还有一种预处理指令叫#define

用于在编译之前对源代码进行文本 替换

宏由预处理器#define指令定义,

#define 名字  数字  常量

#define PI 3.14

 宏函数

 

参数需要()

计算表达式() 

 函数式宏只是做宏展开,不检查类型

条件编译

#ifdef(#ifndef) 宏

....

#else

...

#endlf

 windows

linus

多文件编程

a.cpp    fun1

b.cpp    fun2

c.cpp     fun

{

fun1

fun2

 1.把所有函数分散在多个不同的源文件cpp文件里(主函数通常单独在一个文件里)

2.为每个源文件分别写配对的以.h作为扩展名的头文件(主函数所在的源文件不需要配对的头文件

这些文件包含类的声明、函数原型、宏定义和常量等.

它们的主要作用是提供接口,让其他源文件知道如何使用这些声明和定义.头文件通常以.h或.hpp作为文件扩展名.

int  add(int a ,int  b) ;

3.修改所有源文件,在源文件里使用#include预处理指令包含必要的头文件(在.h中写函数声明,在对应的.cpp文件中写函数的实现)

4.主文件(.cpp)是程序的入口点,通常包含一个main函数.主文件负责将其他源文件编译链接在一起,

形成最终的可执行程序.

多文件编程时编译的命令:编译多文件程序的时候需要在g++命令后列出所有源文件的路径

test_1.cpp

#include "test_1.h"

#include "test_2.h"

test_2.cpp

#include "test_1.h"

#include "test_2.h"

循环引用

死循环

 解决头文件重复引用时的条件编译命令格式

#ifndef   头文件名  (全大写,用_连接)

#define  头文件名

//包含的头文件和函数声明

#endif

 

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

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

相关文章

深度学习------权重衰退

目录 使用均方范数作为硬性限制使用均方范数作为柔性限制演示最优解的影响参数更新法则总结高纬线性回归多项式的权重衰退从零开始实现初始化模型参数定义L2范数惩罚定义训练代码实现忽略正则化直接训练使用权重衰减从零开始代码实现 多项式的权重衰退的简洁实现简洁函数代码简…

案例分享|Alluxio在自动驾驶数据闭环中的应用

分享嘉宾&#xff1a; 孙涛 - 中汽创智智驾工具链数据平台开发专家 关于中汽创智&#xff1a; 中汽创智科技有限公司&#xff08;以下简称“中汽创智”&#xff09;由中国一汽、东风公司、南方工业集团、长安汽车和南京江宁经开科技共同出资设立。聚焦智能底盘、新能动力、智…

学习硬件测试04:触摸按键+PWM 驱动蜂鸣器+数码管(P62~P67、P71、P72)

一、触摸按键 1.1理论讲解 1.1.1实验现象 触摸按键 1 单击与长按&#xff0c;控制 LED1&#xff1b;触摸按键 2 单击与长按&#xff0c;控制 LED2;触摸按键 3 单击与长按&#xff0c;控制 LED3;触摸按键 4 单击与长按&#xff0c;控制继电器; 1.1.2硬件电路 是原理图上触摸…

vue3+element-plus实现table表格整列的拖拽

参考文章&#xff1a;https://blog.csdn.net/candy0521/article/details/136470284 一、为防止原文章不见了将参考文章代码拷过来了&#xff08;不好意思&#xff09;&#xff1a;这是参考文章的代码 可直接复制粘贴运行 <template><div class"draggable-table&…

uniapp 多渠道打包实现方案

首先一个基础分包方案&#xff1a; 包不用区分渠道&#xff0c;只是通过文件名进行区分&#xff0c;公共代码逻辑可以通过mixins进行混入。 这样分包后就需要在打包时只针对编译的渠道包文件进行替换打包&#xff0c;其他渠道包的文件不打包进去&#xff0c;通过工具类实现…

商业策划案怎么写?附商场230个策划案例

商业策划案的撰写是一个系统性工程&#xff0c;旨在详细阐述项目的背景、目标、实施策略、财务预测及风险评估等内容&#xff0c;以吸引投资者或合作伙伴的关注。 以下是一个详细的撰写步骤和要点&#xff0c;码字不易&#xff0c;如果回答对你有所帮助&#xff0c;请不吝给一…

GraphRAG如何使用ollama提供的llm model 和Embedding model服务构建本地知识库

使用GraphRAG踩坑无数 在GraphRAG的使用过程中将需要踩的坑都踩了一遍&#xff08;不得不吐槽下&#xff0c;官方代码有很多遗留问题&#xff0c;他们自己也承认工作重心在算法的优化而不是各种模型和框架的兼容性适配性上&#xff09;&#xff0c;经过了大量的查阅各种资料以…

【目标和】python刷题记录

R3-dp篇. 目录 思路&#xff1a; 增加记忆化搜索&#xff1a; 优化空间复杂度&#xff1a; 思路&#xff1a; class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:#设正数之和为p,总元素之和为s&#xff0c;带符号总元素之和为t&…

AWS开发人工智能:如何基于云进行开发人工智能AI

随着人工智能技术的飞速发展&#xff0c;企业对高效、易用的AI服务需求日益增长。Amazon Bedrock是AWS推出的一项创新服务&#xff0c;旨在为企业提供一个简单、安全的平台&#xff0c;以访问和集成先进的基础模型。本文中九河云将详细介绍Amazon Bedrock的功能特点以及其收费方…

安卓常用控件(上)

文章目录 TextViewButtonEditText TextView textview主要用于在界面上显示一段文本信息。 属性名描述id给当前控件定义一个唯一的标识符。layout_width给控件指定一个宽度。match_parent&#xff1a;控件大小与父布局一样&#xff1b;wrap_content&#xff1a;控件大小刚好够包…

WinUI vs WPF vs WinForms: 三大Windows UI框架对比

1.前言 在Windows平台上开发桌面应用程序时&#xff0c;WinUI、WPF和WinForms是三种主要的用户界面框架。每种框架都有其独特的特点和适用场景。本文将通过示例代码&#xff0c;详细介绍这些框架的优缺点及其适用场景&#xff0c;帮助dotnet桌面开发者更好地选择适合自己项目的…

【Spring】SSM框架整合Spring和SpringMVC

目录 1.项目结构 2.项目的pom.xml文件 3.spring.xml和springMVC配置文件 4.database.properties和mybatis.xml配置文件 5. 代码编写 6.测试整合结果 1.项目结构 首先创建一个名为ssm_pro的Mavew项目&#xff0c;然后再在主目录和资源目录下&#xff0c;创建如下所示的结…

5.2-软件工程基础知识-软件过程模型

软件过程模型 瀑布模型瀑布模型变种-V模型演化模型-原型模型增量模型演化模型-螺旋模型喷泉模型基于构件的开发模型形式化方法模型统一过程模型敏捷方法极限编程其他方法 软件过程模型概述练习题 瀑布模型 瀑布模型(SDLC):瀑布模型是一个经典的生命周期模型&#xff0c;一般将软…

SpringBoot中如何正确使用Redis(详细介绍,原理讲解,企业版)

1.引入Redis依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2.配置Redis的连接信息(application.yml) 实际开发中有两个一个是开发环境applicati…

VBA字典与数组第十七讲:工作表数组大小的扩展及意义

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

JAVA(IO流)7.31

ok了家人们今天还是学习IO流&#xff0c; 一.打印流【了解】 1.1 打印流的概述 我们平时使用的System语句就是调用了print()方法和println()方法。 这两个方法都来自于 java.io.PrintStream 类。 作用&#xff1a; 该类能够方便地打印各种数据类型的值&#xff0c;写入数据后…

谷粒商城实战笔记-115-全文检索-ElasticSearch-进阶-bool复合查询

文章目录 1&#xff0c;must2&#xff0c;must not3&#xff0c;should 1&#xff0c;must {"query": {"bool": {"must": [{"match": {"gender": "M"}},{"match": {"address": "mill&q…

java代码审计-SQL的注入

0x01 前言 Java里面常见的数据库连接方式有三种&#xff0c;分别是JDBC&#xff0c;Mybatis&#xff0c;和Hibernate。 0x02 JDBC注入场景 很早之前的Javaweb都是用JDBC的方式连接数据库然后去实现dao接口再调service业务层去实现功能代码JDBC连接代码 WebServlet("/d…

科技云报道:大模型引领技术浪潮,AI安全治理面临“大考”

科技云报道原创。 从文生文到文生图&#xff0c;再到文生视频&#xff0c;近年来&#xff0c;以ChatGPT、Sora等为代表的大模型引领了全球人工智能技术与产业的新一轮浪潮。2024年更是被业内称为大模型应用爆发元年。 年初&#xff0c;Sora横空出世验证了Scalling Law在视频生…