C++基础入门速通

一、hello world 打印

1.1.C语言版本

#include<stdio.h>

int main(){

printf("hello world");

return 0;

}

1.2.C++版本

#include<iostream>

using namespace std;

int main() {

cout << "hello world!" << endl;

return 0;

}

二、命名空间冲突

2.1.命名空间的定义

需要使用namespace关键字,后面跟命名空间的名字,再加上一对{},{}中即为命名空间的成员,命名空间中可以定义函数、变量、类型等。

namespace本质是定义出一个域,与全局域独立。

C/C++中,主要有全局域、局部域、命名空间域和类域,命名空间域和类域不影响变量的生命周期。

#include<iostream>

//using namespace std;

//int main() {

// cout << "hello world!" << endl;

// return 0;

//}

int main() {

/*cout << "a" << endl;*/

int a = 1;

int a = 10;

printf("%d", a);

return 0;

}

2.2."就近原则"与遮蔽效应

当内外层作用域存在同名变量时,编译器会优先使用当前层级(最近)的变量,从而暂时"屏蔽"掉外层的同名变量。

三、命名空间定义变量、函数、类型

#include<iostream>

namespace sk {

//1.命名空间定义变量

int a = 1;

//2.命名空间定义函数

int add(int c, int b) {

return c+ b;

}

//3.命名空间定义类型

struct k {

int val;

struct k* next;

};

}

int a = 9;

int main() {

printf("%p\n",a);

printf("%d\n",sk:: a);

return 0;

}

四、命名空间的使用

4.1.命名空间可以嵌套使用

namespace sk {

//1.命名空间定义变量

int a = 1;

//2.命名空间定义函数

int add(int c, int b) {

return c+ b;

}

//3.命名空间定义类型

struct k {

int val;

struct k* next;

};

//命名空间嵌套使用

namespace ok {

int q = 6;

int sub(int d, int e) {

return d - e;

}

}

}

4.2.使用命名空间定义的函数、变量有三种方式
a.指定命名空间访问
b.using将命名空间中的某个成员展开
c.展开命名空间中的全部成员
4.3.未声明的标识符

namespace bc{

int a = 1;

int b = 2;

}

int main() {

printf("%d\n", a);

return 0;

}4.4.多文件中可以定义同名namespace它默认会合并在一起就如同是一个namespace一样

五、C++的输入与输出

5.1.<iostream>

<iostream>是input output stream的缩写,是标准的输入输出流库,定义了标准的输入输出对象。

5.2.std::cin

std::cin是标准输入流,主要面向窄字符的标准输入流。

5.3.std::cout

std::cout是标准输出流,主要面向窄字符的标准输出流。

5.4.std::endl

std::endl是一个函数,流插入输出时,相当于插入一个换行字符和刷新缓冲区的作用。

六、缺省参数

6.1.缺省参数的定义

缺省参数是函数声明和定义时为函数的参数指定一个缺省值,在函数调用过程中,如果没有指定实参九使用形参的缺省值。缺省函数分为全缺省和半缺省。

6.2.全缺省

全缺省就是全部形参给缺省值。

6.3.半缺省

半缺省就是部分形参给缺省值。C++规定的半缺省值必须从右到左依次连续缺省,不能跳跃间断。

带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃间断。

七、函数重载

7.1.定义

C语言中函数在同一作用域中不支持同名使用,C++支持在同一作用域中出现同名函数,可以是参数个数或者类型或类型顺序不同,使用起来更加灵活

7.2.使用
a.参数类型不同
b.参数个数不同
c.参数类型顺序不同

八、引用

8.1.引用的概念和定义

引用就如同现实生活中的给别人取外号一样,同理,在C++中,给已存在的一个变量取别名,这称为引用,编译器不会为引用单独开辟空间。

定义:类型&引用别名=引用对象;

8.2.引用的特性
a.定义时初始化
b.一个变量可以有多个引用
c.一旦引用一个实体,就不能引用其他实体
8.3.引用在实际中的应用

(引用传参和引用做返回值)实践中主要引用传参和引用作返回,减少拷贝提高效率和改变引用对象时同时改变被引用对象

代码如下:可自行测试

#include<iostream>

using namespace std;

void swap(int& a, int& b) {

int tmp;

tmp = a;

a = b;

b = tmp;

}

int main() {

int x=20,y=90;

cout << x << " " << y << endl;

swap(x, y);

cout << x<< " " << y<< endl;

return 0;

}

九、const引用

9.1.const引用的定义

在 C++ 中,const 引用(常量引用)是指不允许通过该引用修改其所绑定对象的引用。它的核心语法是在类型前加上 const 修饰符。

9.2.使用

引用const对象,要用const引用。const引用可以引用普通对象,引用权限可以缩小,但不能放大

代码如下:可以自行测试

#include<iostream>

using namespace std;

int main() {

const int x = 20;//只读不写

//int& a = x;//这里可写,报错原因:权限放大了

const int& a = x;

int y = 30;

const int& b = y;//只能看,不能改

cout << x << " " << a << endl;

cout << y << " " << b << endl;

return 0;

}

十、指针和引用的关系

10.1.引用不开空间,指针是地址,需要开空间。

10.2.引用需要初始化,指针建议初始化。

10.3.引用在初始化一个对象后,不能再引用其他对象,指针可以改变指向。

10.4.引用可以直接访问指向对象,指针需要初始化。

十一、inline

11.1.内联函数的定义

用inline修饰的函数称为内联函数,如swap函数。

11.2.使用

适用于频繁调用的短小函数(5-10)行,不适用于代码相对多的函数,因为加上inline也会背编译器省略。

代码如下:可以自行测试

#include<iostream>

using namespace std;

inline int add(int x, int y) {

return x + y;

}

int main() {

int x = 10;

int y = 20;

cout << x << " " << y<< endl;

return 0;

}

十二、nullptr

12.1.定义

nullptr是一个特殊的关键字,nullptr是一种特殊类型的字面量,它可以转换成任意其他类型的指针类型使用nullptr定义空指针可以避免类型转换的问题,因为nullptrl只能被隐式地转换为指针类型而不能转换为整数类型。

#include<iostream>

using namespace std;

void f(int x) {

cout << "f(int x)" << endl;

}

void f(void* x) {

cout << "f(void *x)" << endl;

}

int main() {

f(0);

return 0;

}

#include<iostream>

using namespace std;

void f(int x) {

cout << "f(int x)" << endl;

}

void f(void* x) {

cout << "f(void *x)" << endl;

}

int main() {

f(0);

f(NULL);

f(nullptr);

return 0;

}

相关推荐
en.en..4 分钟前
Linux mmap 内存映射深度解析:基于帧缓冲 /dev/fb0
java·服务器·前端
geovindu4 分钟前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
洋不写bug6 分钟前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
后台模板学习10 分钟前
用 IM 即时聊天项目一次讲清消息去重算法的踩坑与解决方案
java·数据库·spring
秋名RG11 分钟前
2026/6/15 系统故障复盘与整改方案
java·架构
今天要早睡_14 分钟前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
南讯股份Nascent17 分钟前
2026年CRM技术选型观察:当“数据打通“成为第一需求,电商CRM的架构价值在哪里
java·大数据·用户运营
心易行者22 分钟前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
汉克老师1 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》
c++·csp-j·小学生·学c++编程
闻缺陷则喜何志丹1 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷