初始C++
感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步
个人主页:LaNzikinh-CSDN博客
文章目录
- 前言
- 一.引用
- 二.内联函数
- 三.类和对象
- 总结
前言
之前讲c++的命令空间和第一个程序的运行,继续讲解一下c++的语法,然后开始进入类和对象的学习
一.引用
引用变量,是c++区别与c语言的语法,引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用:可以看作一个已定义变量的别名
引用变量的创建
Type&name=var;
int main()
{int a = 10;int& b = a;cout << b << endl;return 0;
}
意思就是说初始化了一个A的变量,在创建一个引用变量B,然后把A赋给B,那我现在操控B就是在操控A
但是引用在使用的时候还远一些注意的事项
注意:
1.&不是取地址,而是起标识作用
2.必须在声明引用变量时进行初始化
3.引用初始化之后,不能再引用其他的变量了
4.不能有NULL引用
引用变量的本质
有人会说引用到底是什么东西,为什么可以这样赋值,引用到底有什么用?
引用的本质:是一个常量指针,引用所占用空间大小与指针相同
int main()
{int b = 0;int& a = b;//==int *const a=&b;a = 20;//*a=20;return 0;
}
引用作为函数的参数(不需要进行初始化)
引用的作用比较经典的就是可以作为函数的参数
typedef struct Teacher
{int age;
}Te;
void Print(Te& t)
{t.age=32;
}
int main()
{Te t;t.age = 30;Print(t);cout<<t.age<<endl;return 0;
}
这是一个很经典的代码,你们先思考一下之后打印出来的纸是30还是32?这个也完全验证了应用的本质到底是什么
我用的是.直接访问了这个函数的值,为什么会改变?出了这个函数不是应该会被销毁吗?
上面的代码把他转化一下,引用的本质:是一个常量指针
typedef struct Teacher
{int age;
}Te;
void Print(Te*const t)
{t->age = 32;
}
int main()
{Te t;t.age = 30;Print(&t);cout << t.age << endl;return 0;
}
二.内联函数
定义:
内联函数本身也是一个真正的函数,唯一不同之处在于会在适当的地方向预处理宏一样展开,所以不需要函数调用开销。
创建
内联函数:在普通函数之前加上inline关键字
inline int fun(int a)
{return a++;
}
作用
以前我们写过一个宏函数的对比,如果进行一些简单的函数实现的话,就不用纠结使用宏还是函数的,直接用内联函数就可以了
注意:
1.内联函数的声明和定义要在一起
2.注意事项以下情况不会将函数进行内联编译
3.存在任何循环语句
4.存在过多的条件,判断语句
5.对函数取地址(内联函数没有函数的调用开销,取地址必然错误)
6.函数体过于庞大
默认参数
在c++的语法中,是有一个默认参数的功能,就是说你函数传递参数的时候可以只传一个或者少传几个,但是前提是你得把默认的参数写好,顺序不可出错,不然还是不行
//默认参数
float func(int r, float pi = 3.14)
{return pi * r * r;
}
int main()
{float r=func(10);//可以只传一个数cout << r << endl;
}
如果是这样就不可以
float func(int r=3, float pi )
{return pi * r * r;
}
int main()
{float r=func(10);//可以只传一个数cout << r << endl;
}
函数重载
函数重载:1.用同一个函数名定义的不同函数2.当函数名和不同参数的搭配。
条件:同一个作用与参数个数不同,参数类型不同,参数的顺序不同
#include<iostream>
using namespace std;
void func()
{cout << "func()"<< endl;}
void func(int a)
{cout <<a<< endl;
}
void func(int a,double b)
{cout <<a<<b<< endl;
}
void func(double a,int b)
{cout <<a<<b<< endl;
}
int main()
{func();func(1);func(1, 1.2);func(1.2, 1);return 0;
}
三.类和对象
C和C++他们两个语言得很重要的区别,就是一个是面对过程的编程,一个是面对对象的编程,所以我们这次才简单地了解一下对象和类
类的定义与访问
class nameA
{
public://访问控制符 private pretected//成员变量//属性//成员函数//方法
};
例子,创建一个动物类
class animal
{
public:char name[32];int age;void jiao(const char* voice){//内部namecout<<name<< voice<<endl;}
};
对象的实例化
有3种
实例化普通对象,用数组实例化多个对象,定义一个指针对象
//对象的实例化
animal cat;
animal cat[10];
animal* cat;
类成员的访问控制
private----私有(只能在类的内部访问)要修改需要通过内部来改,public------公有(在类的内外部都可访问),protected------保护(只能在类的内部访问)
内部外部是什么??
class animal
{
public:char name[32];int age;void jiao(const char* voice){//内部namecout<<name<< voice<<endl;}
};
int main()
{//对象的实例化animal cat;cat.age = 1;//外部cat.jiao("xia");return 0;
}
例题
如果要改变被private里面的对象改怎么办?
思路:要修改需要通过内部来改
class animal
{
public:char name[32];void set_age(int age){_age = age;}int get_age(){return _age;}
private:int _age;
};
int main()
{ animal cat;cat.set_age(1);//外部int a = cat.get_age();cout << a << endl;return 0;
}
总结
这次我们讲解了C++的语法引用,内联函数,类和对象等下次就要正式进入C++的类和对象了,这次大改的了解了一下,下次就要真正的感受到面对对象编程的魅力了
相关文章:

初始C++
感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.引用二.内联函数三.类和对象总结 前言 之前讲c的命令空间和第一个程序的运行,继…...

Chapter 5 Current Mirrors and Biasing Techniques
Chapter 5 Current Mirrors and Biasing Techniques 这一章介绍电流镜 5.1 Basic Current Mirrors MOS工作在饱和区, 表现为一个电流源. 考虑电源变化, PVT波动, 我们会首先产生一路精准电流源, 再复制这路电流. 如何复制呢? 电流转电压再转电流就行了, 如下图所示 考虑到…...
Avalonia Image控件上通过鼠标拖动画出矩形框
注册鼠标事件:首先,你需要注册 Image 控件上的鼠标事件,包括 PointerPressed、PointerMoved 和 PointerReleased。你可以在 XAML 文件或代码中注册这些事件。 <Image PointerPressed"Image_PointerPressed" PointerMoved"…...

Wireshark Lua插件入门
摘要 开发中经常通过抓包分析协议,对于常见的协议如 DNS wireshark 支持自动解析,便于人类的理解,对于一些私有协议,wireshark 提供了插件的方式自定义解析逻辑。 1 动手 废话少说,直接上手。 第一步当然是装上wiresh…...

XXE漏洞简介
目录 漏洞原理 漏洞危害 前置知识 XML简介 DTD简介 DTD的两种声明方式 实体 实体分类 内置实体(Built-inentities) 字符实体(Characterentities) 通用实体(Generalentities) 参数实体(Parameterentities) XXE漏洞…...

小白跟做江科大32单片机之蜂鸣器
1.复制之前编写的工程库项目,详细工程库创建过程如下链接: 小白跟做江科大32单片机之LED闪烁-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139295351?spm1001.2014.3001.55022.按照江科大老师给的图片进行连接蜂鸣器 接线时要用公…...

IsoBench:多模态基础模型性能的基准测试与优化
随着多模态基础模型的快速发展,如何准确评估这些模型在不同输入模态下的性能成为了一个重要课题。本文提出了IsoBench,一个基准数据集,旨在通过提供多种同构(isomorphic)表示形式的问题,来测试和评估多模态…...
MyEclipse使用教程
MyEclipse使用教程如下,按照以下步骤,您可以逐步熟悉并掌握MyEclipse的基本使用: 一、MyEclipse安装与准备 软件准备: 在使用MyEclipse之前,您需要确保已经安装了JDK(Java Development Kit)。J…...

TiDB学习9:Ti Cloud简介
目录 1. 为什么选择TiDB 2. 多租户 3. TiDB架构 4. 什么是TiDB Cloud 5. TiDB Cloud Provider Region 6. TiDB Cloud 入门 6.1 在浏览器中打开TiDB Cloud 6.2 创建您的账户 6.3 Developer Tier 与Dedicated Tier 6.3.1 Developer Tier 6.3.2 Dedicated Tier 6.3.2.…...
JavaScript 创建新节点的方法
在 JavaScript 中,可以使用 document.createElement() 方法来创建新的节点。该方法接受一个字符串参数,表示要创建的节点类型,如 "div"、"p" 等。 创建一个新节点的基本步骤如下: 使用 document.createElem…...

在phpstorm2024版里如何使用Jetbrains ai assistant 插件 ?
ai assistant激活成功后,如图 ai assistant渠道:https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上,Google 为 Android Studio 推出了 Studio Bot 功能,使用了谷歌编码基础模型 Codey,Codey 是…...

进程间通信(27000字超详解)
🌎进程间通信 文章目录: 进程间通信 进程间通信简介 进程间通信目的 初识进程间通信 进程间通信的分类 匿名管道通信 认识管道 匿名管道 匿名管道测试 管道的四种…...

一、大模型推理
https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…...

.NET IoC 容器(三)Autofac
目录 .NET IoC 容器(三)AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文…...

Day44 动态规划part04
背包问题 01背包问题:每件物品只能用一次完全背包问题:每件物品可以使用无数次 01背包问题 暴力解法:每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是 o…...

html期末复习速览
一.基础标签 1.段落标签<p></p> 特点:分段分割 2.标题标签<h1></h1>……<h6></h6> 特点:文字加粗,单独占一行 3.换行标签<br /> 特点:单标签,强制换行 二.文本格式化…...

CTFHUB-信息泄露-目录遍历和PHPINFO
目录 目录遍历 PHPINFO 目录遍历 很简单,挨着把每个目录都点开看一下 发现2目录下有个 flag.txt 文件,点开发现了本关的flag PHPINFO 这关也很简单,进来之后是一个phpinfo页面,按 CTRL F键打开查询,输入flag&#…...

面向Java程序员的Go工程开发入门流程
对于一个像我这样没有go背景的java程序员来说,使用go开发一个可用的程序的速度是肉眼可见的缓慢。 其难点不在于go语言本身,而是搭建整个工程链路的过程,即所谓的“配环境”。 本文主要讲述如何配出一个适合go开发的环境,以免有同…...
vue3开发高德地图
在vue3的index.html 使用动态注入地址名和key <html lang"en"><head><meta charset"UTF-8" /><link rel"icon" type"image/svgxml" href"/vite.svg" /><meta name"viewport" conten…...

通过DLL方式链接glfw3.dll
主要是CMakeLists.txt文件变化 cmake_minimum_required(VERSION 3.10) project(glfwTest) set(CMAKE_CXX_STANDARD 11) aux_source_directory(. SRC_SOURCES) set(GLFW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) set(GLFW_LIBRARY_DIR ${CMAKE_SOURCE_DIR}/lib/glfw) add_ex…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...