目录
1.C++发展历史
2.C++版本更新
3. C++参考⽂档
4.C++的第⼀个程序
5.命名空间(namespace)
5.1 namespace的价值
5.2 namespace的定义
5.3 命名空间使用
6.C++输⼊&输出
7. 缺省参数
8.函数重载
9. 引用
9.1 引用的概念和特性
9.2 const引用
9.3 引用与指针的关系
10. inline
11. nullptr
12.学习方法
1.C++发展历史
C++的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地⽅可能有差异)在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复杂的软件开发任务,特别是模拟和操作系统的开发⼯作,他感受到了现有语⾔(如C语⾔)在表达能⼒、可维护性和可扩展性⽅⾯的不⾜。
1983年,Bjarne Stroustrup在C语⾔的基础上添加了⾯向对象编程的特性,设计出了C++语⾔的雏形,此时的C++已经有了类、封装、继承等核⼼概念,为后来的⾯向对象编程奠定了基础。这⼀年该语⾔被正式命名为C++。
在随后的⼏年中,C++在学术界和⼯业界的应⽤逐渐增多。⼀些⼤学和研究所开始将C++作为教学和研究的⾸选语⾔,⽽⼀些公司也开始在产品开发中尝试使⽤C++。这⼀时期,C++的标准库和模板等特性也得到了进⼀步的完善和发展。
C++的标准化⼯作于1989年开始,并成⽴了⼀个ANSI和ISO(International Standards Organization)国际标准化组织的联合标准化委员会。1994年标准化委员会提出了第⼀个标准化草案。在该草案中,委员会在保持斯特劳斯特卢普最初定义的所有特征的同时,还增加了部分新特征。
2.C++版本更新

3. C++参考⽂档
https://legacy.cplusplus.com/reference/https://zh.cppreference.com/w/cpphttps://en.cppreference.com/w/
4.C++的第⼀个程序
#include<stdio.h>int main()
{printf("hello world\n");return 0;
}
#include<iostream>using namespace std;int main()
{int a = 10;cout << a << endl;return 0;
}// 这⾥的std cout等我们都看不懂,没关系,下⾯我们会依次讲解
5.命名空间(namespace)
5.1 namespace的价值
#include <stdio.h>
#include <stdlib.h>int rand = 10;
int main()
{
// 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数”printf("%d\n", rand);
return 0;
}
5.2 namespace的定义
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。
// namespace 的命名空间定义
# include<stdlib.h>namespace YuBenDan // YuBenDan是这个空间的名字
{// 定义变量解决了 rand 与 stdlib.h 中的 rand 函数冲突int rand = 10;// 定义函数int Add(int a, int b){return a + b;}// 命名空间可以嵌套namespace cz { // 定义结构体struct Node{struct Node* next;int val;};}
}int main()
{// 这边 cz::rand 就表示从cz这个空间中使用 rand 这个变量cout << YuBenDan::rand << endl; // 使用函数cout << YuBenDan::Add(1, 2) << endl;return 0;
}
5.3 命名空间使用
// 指定某个
YuBenDan::rand// 展开某个
using YuBenDan::rand// 全部展开
using namespace YuBenDan
6.C++输⼊&输出
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
int main()
{int a = 0;double b = 0.1;char c = 'x';cout << a << " " << b << " " << c << endl;std::cout << a << " " << b << " " << c << std::endl;scanf("%d%lf", &a, &b);printf("%d %lf\n", a, b);// 可以⾃动识别变量的类型cin >> a;cin >> b >> c;cout << a << endl;cout << b << " " << c << endl;return 0;
}
7. 缺省参数
#include <iostream>
#include <assert.h>using namespace std;void Func(int a = 0)
{cout << a << endl;
}
int main()
{Func(); // 没有传参时,使⽤参数的默认值Func(10); // 传参时,使⽤指定的实参return 0;
}// 全缺省
void Func1(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}// 半缺省
void Func2(int a, int b = 10, int c = 20)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
8.函数重载
#include<iostream>
using namespace std;// 1、参数类型不同
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}// 2、参数个数不同
void f()
{cout << "f()" << endl;
}void f(int a)
{cout << "f(int a)" << endl;
}// 3、参数类型顺序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
9. 引用
9.1 引用的概念和特性
类型& 引⽤别名 = 引⽤对象;
特性• 引⽤在定义时必须初始化• ⼀个变量可以有多个引⽤• 引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体
#include<iostream>using namespace std;int main()
{int a = 0;// 引⽤:b和c是a的别名int& b = a;int& c = a;// 也可以给别名b取别名,d相当于还是a的别名int& d = b;++d;// 这⾥取地址我们看到是⼀样的cout << &a << endl;cout << &b << endl;cout << &c << endl;cout << &d << endl;return 0;
}
9.2 const引用
• 可以引⽤⼀个const对象,但是必须⽤const引⽤。const引⽤也可以引⽤普通对象,因为对象的访 问权限在引⽤过程中可以缩⼩,但是不能放⼤。
int main()
{const int a = 10;// 编译报错:error C2440: “初始化”: ⽆法从“const int”转换为“int &”// 这⾥的引⽤是对a访问权限的放⼤//int& ra = a;// 这样才可以const int& ra = a;// 编译报错:error C3892: “ra”: 不能给常量赋值//ra++;// 这⾥的引⽤是对b访问权限的缩⼩int b = 20;const int& rb = b;// 编译报错:error C3892: “rb”: 不能给常量赋值//rb++;return 0;
}int main()
{int a = 10;const int& ra = 30;// 编译报错: “初始化”: ⽆法从“int”转换为“int &”// int& rb = a * 3;const int& rb = a*3;double d = 12.34;// 编译报错:“初始化”: ⽆法从“double”转换为“int &”// int& rd = d;const int& rd = d;return 0;
}
9.3 引用与指针的关系
C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有⾃⼰的特点,互相不可替代。
10. inline
• ⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就需要建⽴栈帧了,就可以提⾼效率。

11. nullptr

12.学习方法
最后给大家带来C++的学习方法
