
个人主页 : 流年如梦
专栏 : 《零基础轻松入门C语言》 《数据结构:从入门到掌握》 《C++编程研习录》
文章目录
- 一.C++的第一个程序
- 二.命名空间namespace
- 三.C++的输入(cout)与输出(cin)
-
- 3.1标准输出cout
- 3.2标准输入cin
- 3.3自动识别类型
- [3.4C++ IO加速](#3.4C++ IO加速)
- 四.缺省参数
- 五.函数重载
- [六.引用 &(最常用、最重要语法)](#六.引用 &(最常用、最重要语法))
-
- 6.1什么是引用
- 6.2引用三大特性
- [6.3引用做参数(简化指针,不用 * )](#6.3引用做参数(简化指针,不用 * ))
- 6.4引用做返回值
- 6.5const引用(权限问题)
- 6.6临时对象具有常性
- 七.内联函数inline(替代宏函数)
- 八.nullptr(C++11空指针)
- 🎯总结
- ⚠️易错点
前言
C++ 是在 C 语言基础上发展而来的高性能编程语言,兼具过程化与面向对象特性,是后端、游戏、嵌入式、基础架构开发的核心语言
一.C++的第一个程序
C++完全兼容C语言,但它拥有更现代化的语法
1.1C语言写法(在C++支持)
cpp
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
1.2C++写法
cpp
#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
其中:
#include<iostream>--> 输入输出流头文件,C++输入输出的必须头文件using namespace std;--> 使用标准命名空间,std是C++标准库的空间cout--> 标准输出对象,相当于屏幕<<--> 流插入运算符,表示把数据流向屏幕endl--> 换行并刷新缓冲区- 特点:自动识别类型,不需要
%d、%f、%s
二.命名空间namespace
2.1为什么需要命名空间
C语言最大的问题 --> 全局变量、函数容易冲突
cpp
#include <stdio.h>
#include <stdlib.h>
int rand = 10; // 编译报错!rand 和库函数冲突
int main()
{
printf("%d\n", rand);
return 0;
}
命名空间 = 给名字加一层 "隔离罩",避免冲突
2.2定义命名空间
cpp
namespace 空间名
{
//可以定义:变量、函数、结构体、类型
};
举例:
cpp
namespace bit
{
int rand = 10;
int Add(int a, int b)
{
return a + b;
}
struct Node
{
int val;
struct Node* next;
};
}
2.3命名空间三种使用方式
2.3.1指定空间访问
最规范、项目推荐
cpp
printf("%d\n", bit::rand);
2.3.2展开某个成员
cpp
using bit::rand;
printf("%d\n", rand);
2.3.3展开整个空间
cpp
using namespace bit;
printf("%d\n", rand);
2.4命名空间嵌套
cpp
namespace bit
{
namespace xlx
{
int a = 1;
}
namespace lg
{
int a = 2;
}
}
cout << bit::xlx::a << endl;
cout << bit::lg::a << endl;
2.5多文件同名命名空间会合并
多个文件写同一个namespace时,编译器会自动合并成一个
三.C++的输入(cout)与输出(cin)
3.1标准输出cout
cpp
cout << 变量 << 常量 << endl;
3.2标准输入cin
cpp
cin >> 变量;
3.3自动识别类型
cpp
#include <iostream>
using namespace std;
int main()
{
int a;
double b;
char c;
cin >> a >> b >> c;
cout << a << " " << b << " " << c << endl;
return 0;
}
3.4C++ IO加速
大量输入输出时,C++ 默认较慢,加这三行提速(竞赛必备)
cpp
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
四.缺省参数
4.1概念
声明函数时,给参数一个默认值,调用不传参就用默认值
4.2全缺省参数
cpp
void Func(int a = 10, int b = 20, int c = 30)
{
cout << a << " " << b << " " << c << endl;
}
调用:
cpp
Func(); //全部默认
Func(1); //a=1,其余默认
Func(1,2); //a=1,b=2,c默认
Func(1,2,3); //全部传参
4.3半缺省参数
规则:必须从右往左连续缺省,不能跳着缺省
正确写法:
cpp
void Func(int a, int b = 10, int c = 20)
{}
错误写法:
cpp
void Func(int a = 10, int b, int c)
{}
4.4注意事项
声明与定义不能同时给缺省值 ,缺省值只能写在声明里,定义不能写
五.函数重载
5.1什么是函数重载
同一作用域下:函数名相同,参数不同(类型 / 个数 / 顺序),就构成重载
5.2三种构成重载
5.2.1参数类型不同
cpp
int Add(int a, int b)
{}
double Add(double a, double b)
{}
5.2.2参数个数不同
cpp
void f()
{}
void f(int a)
{}
5.2.3参数类型顺序不同
cpp
void f(int a, char b)
{}
void f(char b, int a)
{}
5.3注意事项❗
返回值不同不能构成重载
错误示例:
cpp
void f()
{}
int f()
{}
调用时编译器无法区分
六.引用 &(最常用、最重要语法)
6.1什么是引用
引用 = 变量的别名,不开新空间,共用同一块内存
引用语法:
cpp
类型& 别名 = 原变量;
举例:
cpp
int a = 10;
int& b = a;
int& c = a;
其中b、c 都是 a 的别名,修改任何一个,a 都会变
6.2引用三大特性
- 定义时必须初始化
- 一旦绑定,不能再改变指向
- 一个变量可以有多个引用
6.3引用做参数(简化指针,不用 * )
直接修改实参,比指针更简洁、更安全
cpp
void Swap(int& rx, int& ry)
{
int tmp = rx;
rx = ry;
ry = tmp;
}
int main()
{
int x = 10, y = 20;
Swap(x, y);
return 0;
}
6.4引用做返回值
返回引用可以修改返回值 ,并且减少拷贝
cpp
int& STTop(ST& st)
{
return st.a[st.top - 1];
}
STTop(st) += 10;//可以直接修改栈顶
6.5const引用(权限问题)
引用时权限可以缩小,但不能放大
正确使用示例:
cpp
const int a = 10;
const int& ra = a;
cpp
int b = 20;
const int& rb = b;
错误使用示例:
cpp
const int a = 10;
int& ra = a;
6.6临时对象具有常性
cpp
int a = 10;
// int& rb = a * 3;// --> 错误
const int& rb = a * 3;// --> 正确
七.内联函数inline(替代宏函数)
7.1作用
频繁调用的短小函数 ,在调用处直接展开,不建立栈帧,提高效率
cpp
inline int Add(int x, int y)
{
return x + y;
}
7.2优点
- 没有宏的坑
- 有类型检查
- 方便调试(宏不可以调试)
7.3注意事项❗
inline只是建议,函数太长、递归会被编译器忽略- 声明和定义不要分离,否则会链接错误
八.nullptr(C++11空指针)
8.1NULL问题
C++中NULL就是0,会导致函数重载调用错误
cpp
void f(int)
{}
void f(int*)
{}
int main()
{
//f(NULL);//调用f(int) --> 这种写法错误的
f(nullptr);//调用f(int*) --> 这是对的
}
注意❗:C++中空指针一律写nullptr!
🎯总结
- 第一个程序 :
#include <iostream> + using namespace std; - 命名空间:解决名字冲突,三种使用方式
cin / cout:自动识别类型,简洁安全- 缺省参数:从右往左连续缺省,声明给默认值
- 函数重载:同名不同参,返回值不参与重载
- 引用:变量别名,简化传参,权限不可放大
inline:短小函数展开,替代宏nullptr:C++11空指针,比NULL更安全
⚠️易错点
- 引用未初始化就使用
- 引用试图改变指向(语法不报错但逻辑错误)
- 缺省参数跳跃缺省、声明定义同时给值
- 以为返回值不同可以构成重载
- 项目滥用
using namespace std- 空指针使用
NULL导致重载错误- 临时对象非常量引用报错
👀 关注 我们一路同行,从入门到大师,慢慢沉淀、稳步成长
❤️ 点赞 鼓励原创,让优质内容被更多人看见
⭐ 收藏 收好核心知识点与实战技巧,需要时随时查阅
💬 评论 分享你的疑问或踩坑经历,一起交流避坑、共同进步