当前位置: 首页 > backend >正文

C++武功秘籍 | 入门知识点

目录

0. 前言

1. C++的第一个程序

2. 域

2.1 分类

2.2 作用

2.3 命名空间

2.3.1 定义

2.3.2 namespace概念

2.3.3 使用

3. 输入和输出

3.1

3.2 cin

3.3 cout

3.4 endl

4. 缺省参数

4.1 定义

4.2 分类

4.3 特点

5. 函数重载

5.1 定义

5.2 类型分类

5.2.1.参数类型不同 

5.2.2. 参数个数不同

5.2.3.参数l类型顺序不同

tip:

6. 引用

6.1 概念

6.2 特点

6.3 简单使用

6.4 const引用

6.4.1 概念

6.4.2用法

6.5 指针和引用

7.inline相关概念

8.nullptr相关概念

9. 总结


0. 前言

今天,咱儿,来学习一名新的语言C++。在正式敲代码之前,我们先来熟悉一下一些入门的基础知识。👇👇👇

1. C++的第一个程序

#include<iostream>
using namespace std;
int main()
{cout<<"Hello world\n"<<endl;return 0;
}

2. 域

2.1 分类

局部域、全局域、命名空间域、类域。

2.2 作用

影响编译查找逻辑(当发生冲突时:类域>局部域>全局域),局部域和全局域还可能会影响变量的生命周期。

2.3 命名空间

2.3.1 定义

在C/C++中,变量、函数和后面要学到的类都是大量存在的。如果将这些变量、函数和类的名称都存放于全局作用域中,可能会导致很多冲突。这时,我们就需要使用命名空间,它目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,而namespace就是针对这种问题的一个关键字。

形式:namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。eg: namespace xiaodenger { int a=0;}

2.3.2 namespace概念

1.它的本质是定义一个域,与全局域相互独立,来避免命名冲突。

2.只能定义在全局,不过,可以嵌套调用哦🤭🤭🤭

namespace xiaodenger
{namespace nam1    //这里将nam1嵌套在xiaodenger中{int a=1;return a+1;}namespace nam2   //这里将nam2嵌套在xiaodenger中{int a=1;     // 这里的a与nam1中的a在两个不同的域中,不会冲突return a+2;  // 但是,如果没有 nam1和nam2,直接写,就会发生冲突}
}

3.多文件中定义的同名namespace,会合并到一起,就像同一个namespace一样,不会冲突。

4.C++标准库都放在⼀个叫std(standard)的命名空间中。

2.3.3 使用

咱们要使用命名空间中定义的变量/函数,有三种方式:

• 指定命名空间访问,项目中推荐。

#include<iostream>
namespace xiaodenger
{int a = 1;int b = 2;
}
int main()
{std::cout << a << std::endl; // 编译报错:error C2065:“a”:未声明的标识符std::cout << xiaodenger::a <<std:: endl;  //输出 1return 0;
}

• using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员时推荐。

#include<iostream>
namespace xiaodenger
{int a = 1;int b = 2;
}
using namespace std;  //展开C++标准库
using xiaodenger::b ;// 展开命名空间中部分成员
int main()
{cout << xiaodenger::a << endl;//输出1cout << b << endl;            //输出2return 0;
}

• 展开命名空间中全部成员,项目中不推荐,冲突风险大,日常练习可以适当使用😄。

eg:⼀般日常练习中我们可以using namespace std,实际项目开发中不建议使用。

#include<iostream>
namespace xiaodenger
{int a = 1;int b = 2;
}
// 展开命名空间中全部成员
using namespace xiaodenger;
using namespace std;  //展开C++标准库
int main()
{cout<<xiaodenger::a<<endl; //输出1cout<<xiaodenger::b<<endl; //输出2return 0;
}

3. 输入和输出

3.1<iostream>

定义:<iostream>是Input Output Stream的缩写,是标准的输入、输出流库(IO流),定义了标准的输入、输出对象。

tip: vs系列编译器,也可以在<iostream>中使用printf 和scanf。其他编译器可能会报错。

3.2 cin

1.std::cin 是istream类的对象,它主要面向窄字符(narrowcharacters(oftypechar))的标准输入流。

2.cin搭配'>>'使用。'>>'称为“提取运算符”。eg:cin>>a;//输入a的值。

3.3 cout

1.std::cout 是ostream类的对象,它主要⾯向窄字符的标准输出流。

2.cout搭配'<<'使用。'<<'称为“插入运算符”。eg:cout<<a;//输出a的值。

3.4 endl

std::endl 是⼀个函数,流插入输出时,相当于插入一个“\n” + 刷新缓冲区。

4. 缺省参数

4.1 定义

缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。

若调用该函数时,没有指定实参 ,则采该形参的缺省值;否则使用指定的实参。

#include <iostream>
#include <assert.h>
using namespace std;
void Fun(int a = 0)
{cout << a << endl;
}
int main()
{Fun();// 没有传参时,使⽤参数的默认值Fun(8);   // 传参时,使⽤指定的实参return 0;
}

4.2 分类

缺省参数分为全缺省和半缺省参数。(有时, “缺省参数”也叫“默认参数

4.3 特点

1.C++规定,半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。

2.函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省 值。

#include <iostream>
using namespace std;
// 全缺省
void Func1(int a = 1, int b = 2, int c = 3)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}// 半缺省
void Func2(int a, int b = 1, int c = 2)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
int main()
{Func1();         //输出 a=1 b=2 c=3Func1(4);        //输出 a=4 b=2 c=3Func1(4, 5);     //输出 a=4 b=5 c=3Func1(4, 5, 6);  //输出 a=4 b=5 c=6Func2(10);       //输出 a=10 b=1 c=2Func2(10, 20);   //输出 a=10 b=20 c=2
//Func1(10, , 30);   //不能间断赋缺省值return 0;
}

5. 函数重载

5.1 定义

C++支持持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。此时,同名函数就是重载。

5.2 类型分类

5.2.1.参数类型不同 

eg : int Add(int a, int b);   和  int Add(float a, float b);

5.2.2. 参数个数不同

eg : int f(int n);   和  int f(); 

5.2.3.参数l类型顺序不同

eg: void f(int a, char b); 和 void f( char a,int b);

tip:

返回值不同不能作为重载条件,因为调用时可能无法区分(有时不需要返回值,有时候只要看看返回值是否大于0)。

eg: void f() ; 和 int f();

6. 引用

6.1 概念

1.引用不是新定义⼀个变量,只是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间, 它和它引用的变量共用同⼀块内存空间。

2.形式:

类型& 引用别名=引用对象;

eg:

 int a = 0;

int & b = a;  // 引用: b  是 a 的别名

tip:C++中&既可以代表引用,也可以代表取地址。(有点小坑😔)一般情况下,类型& 引用别名=引用对象; 时为引用,其他情况下为取地址。

6.2 特点

1.引用在定义时必须初始化

2.⼀个变量可以有多个引用;

3.引用⼀旦引用⼀个实体,再不能引用其他实体。

【这里小邓儿,给咱举个形象的例子:🤭🤭🤭引用就像是爱上一个人。一旦我爱上你(我是你的引用),就不会再去爱别人(我不能是其他人的引用)。即使有很多人爱上我,(我可以有其它引用)但是,我始终只爱你一人。(我一直都只是你的引用)❤❤❤】

6.3 简单使用

1.引用传参和引用做返回值中减少拷贝,提高效率;

2.改变引用对象时,同时改变被引用对象。

#include <iostream>
using namespace std;
void Swap(int& rx, int& ry) //rx是x的别名;ry是y的别名
{int tmp = rx;rx = ry;ry = tmp;
}
int main()
{int x = 0, y = 1;cout << x << " " << y << endl; //输出0 1Swap(x, y);cout << x << " " << y << endl; //输出1 0return 0;
}

6.4 const引用

6.4.1 概念

当对象被const修饰(具有‘常性’---不能直接修改,可以间接修改 vs ‘常量’---不能修改)时,必须用const引用才能引用该对象。而引用普通对象,也可以用const引用。

6.4.2用法

以下的权限是从右向左看(●'◡'●)

1.权限不能放大

1.❌错误

const int a = 10;
int& b = a; //error 右边a不能被修改,而左边int是可修改的

2.❌错误

int  a = 10;
double  & b = a; //error 右边是double类型,而左边是int类型

2.权限可以平移 

const int a = 10;
const int& b = a; //此时b是a的别名,左右两边都是const int 均不能修改

3.权限可以缩小

 int a = 10;
const int& b = a; //此时b是a的别名,右边是可修改变量,左边是不能修改的

tip:区别引用和赋值 

const int a=1;

const int &b=a;   //引用

int c=a;               //赋值 

6.5 指针和引用

1.指针要开辟空间,引用不开辟;

2.引用必须初始化,指针建议初始化;

3.引用在初始化时引用⼀个对象后,不能再引用其他对象; 而指针可以在不断地改变指向对象。(从这里儿,我们可以将“引用”堪称一个“好男人”,而“指针”更像是一个“渣男”)。

4.引用可以直接访问指向对象,指针需要解引用才是访问指向对象。

7.inline相关概念

1.用inline修饰的函数叫做内联函数

2.编译器会在调用的地方展开内联函数,会建立栈帧,可以提高效率;

3.C++设计了inline目的就是替代C的宏函数(define);

4.inline不能将声明和定义分离到两个文件,分离会导致链接错误。

8.nullptr相关概念

1.C++11中引入nullptr,nullptr是⼀个特殊的关键字,它可以转换成任意其他类型的指针类型。

2.使用nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,而不能被转换为整数类型。

3.C++中NULL可能被定义为字面常量0,或者C中被定义为无类型指针(void*)的常量。这也是为什么咱们要引入nullprt。

9. 总结

今天,咱对C++入门的相关概念进行了梳理,希望小邓儿可以和大家一起学习进步学习💪💪💪

都看这么久了,顺带一键三连呗(●'◡'●)

http://www.xdnf.cn/news/2179.html

相关文章:

  • 【Typecho】给Joe主题后台添加custom自定义功能!
  • 安装docker,在docker上安装mysql,docker上安装nginx
  • 华为云Astro canvas大屏与iotDA是怎样通过数据接入、数据中心的功能传输和通讯的?
  • 桌面端开发技术栈选型:开启高效开发之旅
  • WPF框架中异步、多线程、高性能、零拷贝技术的应用示例
  • 基于FFmpeg命令行的实时图像处理与RTSP推流解决方案
  • SpringBoot集成WebSocket,单元测试执行报错
  • lnmp1.5+centos7版本安装php8
  • C++:类和对象(上)---镜中万象:C++类的抽象之境与对象的具体之象
  • gin框架学习笔记
  • 学习笔记(算法学习+Maven)
  • 基于Matlab的MDF文件导入与处理研究
  • 一文详解Adobe Photoshop 2025安装教程
  • SourceTree与git搭建gitcode团队管理项目
  • 精益数据分析(26/126):依据商业模式确定关键指标
  • Python-41:最小替换子串长度
  • uml类关系(实现、继承,聚合、组合,依赖、关联)
  • Word/WPS 删除最后一页空白页,且保持前面布局样式不变
  • Linux——进程间通信
  • Android Compose 框架矢量图标深入剖析(七)
  • C语言中结构体的字节对齐的应用
  • ABAP Object Services
  • 纯PHP写的自适应收款单页源码(对接易支付)
  • WPF 调用 OpenCV 库
  • ChatGPT、deepseek、豆包、Kimi、通义千问、腾讯元宝、文心一言、智谱清言代码能力对比
  • Linux线程与进程:探秘共享地址空间的并发实现与内
  • w~嵌入式C语言~合集3
  • pymongo功能整理与基础操作类
  • 16.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Github Action
  • 深入解析 ASP.NET Core 中的 ResourceFilter