C++入门基础简述

ops/2024/10/18 8:24:32/

在这里插入图片描述

文章目录

  • 前言
    • 1、C++首个程序
    • 2、namespace关键字
    • 3、C++输入/输出
    • 4、缺省参数
    • 5、函数重载
    • 6、C++中的引用
    • 7、const 引用
    • 8、指针和引用的关系
    • 9、inline关键字
    • 10、nullptr关键字

前言

此篇文章主要简述流程:C++首个程序 -> namespace关键字 -> C++输入/输出 -> 缺省参数 -> 函数重载 -> 引用。

1、C++首个程序

  1. C语言中第一个程序的写法:
//C语言中的第一个程序
#include<stdio.h>int main()
{printf("Hello World!\n");return 0;
}
  1. C++第一个程序的写法:
//C++语言第一个程序
#include<iostream>
using namespace std;
int main()
{cout << "Hello World!" << endl;return 0;
}

从对比可以看出两者的差异,一开始只要记住该格式就ok!

2、namespace关键字

含义:命名空间。
主要作用:解决命名冲突的问题。(变量名、函数名、类型名);

  1. 在C++中,4大区域:函数局部域、全局域、命名空间域、类域;其中函数局部域和全局域会影响编译查找逻辑和变量的生命周期,后两者不会影响影响变量的周期。

namespace的定义:
格式:namespace { 函数、变量、类型 }
注意:namespace只能定义在全局区,也就是主函数的外面,同=时支持嵌套定义。具体例子如下:

  • 这个例子可以看出命名冲突的情况:
#include<iostream>
int rand = 10;
int main()
{printf("%d\n",rand);return 0;
}

在这里插入图片描述

  1. 解决上面的问题就用到namespace。
#include<iostream>
namespace variable
{int rand = 10;
}int main()
{printf("%d\n",rand);return 0;
}

写成这样可以解决命名冲突的问题,但怎样访问自己定义的rand数据呢?需要用C++中的作用域::

#include<iostream>
namespace variable
{int rand = 10;
}int main()
{printf("%d\n",variable::rand);return 0;
}

在这里插入图片描述

3、C++输入/输出

  1. 头文件<iostream>表示input output stream的缩写,是标准的输入、输出流库。
  2. std::cin是istream类的对象,主要面向窄字符的标准输入流。
  3. std::cout是ostream类的对象,主要面向窄字符的标准输出流的。
//C++输入/输出
#include<iostream>
using namespace std;
int main()
{cout<<"C++你好!"<<endl;//endl就是换行的return 0;
}

4、缺省参数

  1. 缺省参数的含义:简单说就是我们在声明或定义函数的时候,给参数给定一些初始值,当我们在调用函数的时没给实参的时候就会用参数中的初始值。
  2. 分类:全缺省参数、半缺省参数。
  3. 全缺省参数:给函数的形参都给一个初始值(缺省值);
  4. 半缺省参数:给函数中部分形参给缺省值。
  5. 注意:C++规定半缺省参数的时候,必须从右往左一次缺省(给初始值),必须是连续的,不能间隔。
  6. 当函数的声明和定义分开的时候,缺省参数不能再声明和定义中同时出现,规定必须函数声明给缺省值。

代码例子如下:

//缺省参数
#include<iostream>
using namespace std;
//全缺省参数
void func1(int number=20)
{cout << "number=" << number << "\n";
}
int main()
{func1();func1(666);return 0;
}

在这里插入图片描述

  • 全缺省参数和半缺省参数
//全缺省参数和半缺省参数的区别
#include<iostream>
using namespace std;
//全缺省参数
void func2(int a=10,int b=20,int c=30)
{cout << "a+b+c=" << a + b + c << "\n";
}
//半缺省参数
void func3(int a,int b=20,int c=30)
{cout << "a+b+c=" << a + b + c << "\n";
}
int main()
{func2();func3(40);return 0;
}

在这里插入图片描述

5、函数重载

  1. 含义:在同一作用域中出现相同的函数名。在C++中函数重载可以表现出多态的行为,使用更灵活。
  2. 函数重载的条件:①函数名必须相同。②访问修饰符无要求。③返回值类型无要求。④函数的参数列表必须不同(参数个数不同、参数类型不同、参数的顺序不同)。

下面是函数重载的例子:加法函数实现不同类型的相加

//函数重载
#include<iostream>
using namespace std;
void Add(int a, int b)
{cout << "a+b=" << a + b << "\n";
}
void Add(double a, double b)
{cout << "a+b=" << a + b << "\n";
}
int main()
{Add(10, 20);Add(1.5, 1.5);return 0;
}

在这里插入图片描述

6、C++中的引用

  1. 引用的概念:记住一句话就是引用就是给变量取别名,并且编译器不会给引用变量开辟内存空间的,它和引用的变量共用一个内存空间(原来的内存空间)。简单例子就是《水浒传》各个英雄好汉的外号。
  2. 引用的定义格式:类型名& 引用的别名 = 引用对象;在语言中&表示取地址,C++中是引用别搞混了喔。

我们在使用引用的时候的注意事项:
①引用在定义必须初始化。
②一个变量可以有多个引用,但是一个一会引用只能用于一个变量(引用一旦引用了一个实体后,就不能引用其他实体了)。
③引用也可以被引用。(就是一个变量被引用后,那个引用的又可以取别名。)

  1. 引用的具体应用:
    ①主要用于函数传参和函数的返回值,这样可以减少拷贝从而提高效率。
    ②在改变引用后,被引用对象会跟着改变。
  2. 具体例子如下:
//引用的应用(交换两个数)
#include<iostream>
using namespace std;
void Swap(int& a, int& b)
{int tmp = a;a = b;b = tmp;
}
int main()
{int number1 = 100;int number2 = 200;cout << "number1=" << number1 << "  " << "number2=" << number2 << "\n";Swap(number1, number2);cout << "number1=" << number1 << "  " << "number2=" << number2 << "\n";return 0;
}

可以看到引用的变量和被引用对象是同一个内存空间。
在这里插入图片描述

7、const 引用

const引用就是被引用对象是const修饰的。

  1. 在使用const 需要提到权限缩放。例如:
//const 引用
#include<iostream>
using namespace std;
int main()
{权限放大//const int number = 10;//只读的权限,因为const修饰的//int& rnu = number;//变为了可读可写的,因此报错//权限缩小可以int number2 = 30;const int& rnu = number2;cout << "rnu=" << rnu << "\n";//平级的可以int number3 = 40;int& rnu1 = number3;cout << "rnu1=" << rnu1 << "\n";return 0;
}
  1. 临时对象的情况:产生条件是一个表达式、函数调用返回值、类型转换。编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象,在C++中把这个未命名对象叫做临时对象。
  2. 比如说:
#include<iostream>
using namespace std;
int main()
{int a = 10;int b = 20;//int& rab = a + b;//a+b是临时变量,临时变量具有常性,需要const修饰const int& rab1 = a + b;cout << "rab1=" << rab1 << "\n";return 0;
}

8、指针和引用的关系

①首先从语法上看,引用就是给变量取别名,不用开辟内存空间,是和被引用对象共用内存空间的;但是指针是存储变量的地址的,是需要开辟新的内存空间的;
②从使用角度看,引用在使用的时候必须初始化的,而指针从语法不是必须初始化的,但是建议初始化,避免野指针。
③引用在引用一个对象后,就不能再引用其他对象,但是指针可以不断改变指向的对象。
④引用可以直访问所指的对象,而指针需要解引用才可以。
⑤在引用的条件下,sizeof表示引用类型的大小,但是指针使用sizeof则是表示不同操作系统下所占字节个数(32位中占4位,64位下占8位)
⑥从安全角度看,指针很容易出现野指针,而引用相对来说不太容易出现。

9、inline关键字

inline关键字:只要是该关键字修饰的函数叫做内联函数。我们在编译C++编译器的时候,会在调用函数的地方展开内联函数,这样调用内联函数就需要建立栈帧,从而提高效率。
应用地方:主要是用于频繁调用的短小的函数。不适合递归函数。

10、nullptr关键字

nullptr实质是一个宏;
在C++中,NULL定义成为了0,然而在C语言中被定义成为的是空指针;为了防止下面错误的发生:
在这里插入图片描述
于是在C++中又定义了nullptr指针,是一种特殊的关键字,它可以转换成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,⽽不能被转换为整数类型。


http://www.ppmy.cn/ops/56671.html

相关文章

dg首次全量同步的几种方式

方式一&#xff1a; su - oracle sqlplus "/ as sysdba" SQL>select copy datafile ||||file_name|||| to ||||/oradata/dkwhdb_dg/||substr(file_name,instr(file_name,/,-1)1)||; from dba_data_files; rman target / RMAN>(将上述命令在该处运行) 方式…

102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程

自定义实现的Table控件&#xff0c;支持跨qt版本&#xff0c;兼容qt5,qt6&#xff01; 截图如下所示: 黑色风格如下所示&#xff1a; 视频演示入口&#xff1a;Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili 1.示例页面入口…

Java面试八股之什么是布隆过滤器

什么是布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率极高的概率型数据结构&#xff0c;用于判断一个元素是否可能存在于一个集合中。布隆过滤器可以给出“可能存在”或“一定不存在”的答案&#xff0c;但不能保证“一定存在”。其主要特点是&…

阿里云人工智能平台PAI论文入选OSDI ‘24

近日&#xff0c;阿里云人工智能平台PAI的论文《Llumnix: Dynamic Scheduling for Large Language Model Serving》被OSDI 24录用。论文通过对大语言模型&#xff08;LLM&#xff09;推理请求的动态调度&#xff0c;大幅提升了推理服务质量和性价比。 Llumnix是业界首个能灵活在…

Web3学习路线图,从入门到精通

前面我们聊了Web3的知识图谱&#xff0c;内容是相当的翔实&#xff0c;要从哪里入手可以快速的入门Web3&#xff0c;本篇就带你看看Web3的学习路线图&#xff0c;一步一步深入学习Web3。 这张图展示了Web3学习路线图&#xff0c;涵盖了区块链基础知识、开发方向、应用开发等内…

使用Docker、Docker-compose部署单机版达梦数据库(DM8)

安装前准备 Linux Centos7安装&#xff1a;https://blog.csdn.net/andyLyysh/article/details/127248551?spm1001.2014.3001.5502 Docker、Docker-compose安装&#xff1a;https://blog.csdn.net/andyLyysh/article/details/126738190?spm1001.2014.3001.5502 下载DM8镜像 …

软链接node_modules

公司项目很多微应用的子项目公用同一套模板&#xff0c;也就会使用同一个node_modules 1.先创建3个同样的项目,并安装一个其中的一个node_modules给他丢到外边 2.win r -------> cmd --------> ctrlshift enter(已管理员身份打开cmd) 3.在窗口分别执行以下代码…

【vueUse库Reactivity模块各函数简介及使用方法--下篇】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseReactivity函数1. refWith…