
最近这段时间也是开始接触C++了,同时也在接触数据结构,真的是比较忙啊,过俩天在更新《数据结构杂谈》的内容,今天先更新C++的。目前我学习C++的方式主要是看书,在B站大学里学习文章后半段内容会推荐一些C++的书籍,感兴趣的可以看一下。
我特别想跟大家分享一下我的学习心得。今天,我将用最通俗易懂的语言,带你们走进C++的奇妙世界,让C++不再那么神秘莫测。无论你是编程小白,还是刚接触过一点编程,这篇博客都会让你对C++有一个全新的认识。
C++可不是突然冒出来的,它的故事要从1979年说起。当时,一位叫Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)的程序员在贝尔实验室工作。他发现C语言在处理复杂项目时有点"力不从心",就像用一把小刀去砍大树,虽然能砍,但效率太低。
于是,他决定在C语言的基础上,增加一些"魔法",让编程变得更高效、更有趣。1983年,他把这种新语言命名为"C++"("++"表示递增,寓意C语言的升级版)。
C++的诞生,就像给程序员们配了一把"瑞士军刀",既有C语言的高效,又有面向对象编程的优雅。它就像一个全能选手,能胜任各种编程任务。
C++在编程界的地位,就像"老大哥"一样重要。我们来看看它的应用领域:
C++兼容C语言的绝大多数语法,所以C语言的"Hello World"在C++中也能运行。但是C++有自己的输入输出方式,更现代化、更方便。
// C语言的Hello World
#include <stdio.h>
int main() {
printf("Hello World\n");
return 0;
}// C++的Hello World
#include <iostream>
using namespace std;
int main() {
cout << "Hello World" << endl;
return 0;
}这里有几个关键点需要解释:
#include <iostream> :C++的输入输出流库,相当于C语言的#include <stdio.h>using namespace std; :使用标准命名空间,让 cout、endl 等可以直接使用cout :C++的输出流,相当于C语言的printf<< :流插入运算符,用于将数据插入到输出流中endl :换行并刷新缓冲区,相当于C语言的\nC语言的printf和scanf需要手动指定格式,比如printf("%d", a),而C++的cout可以自动识别变量类型:
int a = 10;
double b = 3.14;
cout << a << " " << b << endl; // 输出:10 3.14这就像C++自带了一个"智能助手",能自动判断你输出的是什么类型,不需要你手动指定格式。
在C语言中,如果两个文件定义了同名的函数或变量,编译器就会报错,就像两个同学都叫"小明",老师很难区分谁是谁。
// 文件1
int rand = 10;
// 文件2
int rand = 20; // 编译错误:重复定义C++引入了命名空间(namespace),就像给每个人分配了一个"家庭",在同一个家庭内可以有同名的人,但不同家庭之间不会冲突。
// 定义命名空间
namespace bit {
int rand = 10;
int Add(int left, int right) {
return left + right;
}
}
int main() {
// 访问bit命名空间中的rand
cout << bit::rand << endl; // 输出:10
// 访问bit命名空间中的Add函数
cout << bit::Add(1, 2) << endl; // 输出:3
return 0;
}命名空间的三种方式:
指定命名空间访问(推荐):
cout << bit::rand << endl;using将命名空间中某个成员展开:
using bit::rand;
cout << rand << endl;展开命名空间中全部成员(不推荐,可能引起冲突):
using namespace bit;
cout << rand<<endl;C语言的输入输出需要手动指定格式,比如scanf("%d", &a),而C++的cin可以自动识别变量类型:
int a;
doubie b;
cout << a << b; //能够自动识别 a是 int 型,b是 double型这就像C++的输入输出自带了"智能识别"功能,不需要你费心指定格式。
using namespace std; ?C++标准库中的所有函数和对象都放在std命名空间中,比如cout、cin、endl等。using namespace std;就是把std命名空间中的所有内容"导入"到当前作用域,这样我们就可以直接使用cout、cin等,而不需要写std::cout。
提醒:在实际项目中,我们不建议使用
using namespace std;,因为它可能引起名字冲突。但在学习阶段,为了方便,可以暂时使用。
缺省参数是指在函数声明或定义时,给参数指定一个默认值。调用函数时,如果没有指定实参,就使用这个默认值。
#include<iostream>
using namespace std;
void fanc(int a=0,int b=0)
{
cout << "a = "<< a << ",b = "<< b << endl;
}
int main()
{
fanc();
fanc(0);
fanc(0,0);
fanc(9,29);
return 0;
}运行结果:

//正确形式,半缺省,从右往左连续
void func(int a,int b =10,int c =20){……}
//错误形式,半缺省,从右往左不连续
void fanc(int a=10,int b,int c =20){……}函数重载是指在同一个作用域中,可以定义多个同名函数,但它们的参数列表不同(参数个数不同或类型不同)。调用时,编译器会根据传入的参数自动选择合适的函数。
// 参数类型不同
int Add(int left, int right) {
return left + right;
}
double Add(double left, double right) {
return left + right;
}
// 参数个数不同
void f() {
cout << "f()" << endl;
}
void f(int a) {
cout << "f(int a)" << endl;
}
// 参数类型顺序不同
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;
}函数重载让代码更简洁、更易读。比如,我们想计算两个数的和,不管它们是整数还是浮点数,都可以用Add函数,不需要写AddInt、AddDouble等。
小贴士:记住,返回值类型不同不能作为函数重载的条件。因为调用函数时,编译器无法通过返回值类型来确定调用哪个函数。
引用不是新定义一个变量,而是给已存在变量取了一个别名。引用和它引用的变量共用同一块内存空间。
int a=0;
int &b =a; //b是a的一个小名
int &c =a; //c也是a的一个小名引用的特性:
引用传参可以避免拷贝,提高效率。比如,交换两个变量的值:
void Swap(int &x, int &y) {
int tmp = x;
x = y;
y = tmp;
}
int main() {
int a = 1, b = 2;
Swap(a, b);
cout << "a = " << a << ", b = " << b << endl; // 输出:a = 2, b = 1
return 0;
}引用可以作为函数的返回值,允许修改被引用的对象。
int &GetMax(int &a, int &b) {
return a > b ? a : b;
}
int main() {
int a = 10, b = 20;
GetMax(a, b) = 30; // 修改a或b中较大的那个
cout << "a = " << a << ", b = " << b << endl; // 输出:a = 10, b = 30
return 0;
}const引用可以引用常量,也可以引用普通变量,但引用的变量不能被修改。
int a = 10;
const int &ra = a; // ra是a的常引用
// ra = 20; // 错误:不能修改常引用const引用还特别适合用于函数参数,可以避免不必要的拷贝,同时保证不修改原数据。
void Print(const int &a) {
cout << a << endl;
}inline是C++中的一个关键字,用于修饰函数,表示这个函数是内联函数。编译器在调用内联函数时,会直接将函数体展开,而不是像普通函数那样建立栈帧。
inline int Add(int x, int y) {
return x + y;
}普通函数调用需要建立栈帧,有额外的开销。对于频繁调用的短小函数,使用inline可以避免这个开销,提高效率。
⾸先第⼀个问题,C++难学吗?⾸先在这⾥告诉⼤家C++是⼀个相对难学难精的语⾔,相⽐其他⼀些语⾔,学习难度要⾼⼀些要陡峭⼀些,这⾥有历史包袱的问题,也有语⾔本⾝设计和发展历史的问题。 ⽹上以前⼀直流传下⾯这个21天内⾃学精通C++的梗。

C++确实比一些语言难学一些,但不要害怕!它就像一座山,虽然陡峭,但登顶后的风景非常壮丽。
学长经验:C++学习曲线比较陡峭,但一旦掌握了核心概念,后面的路就会顺畅很多。

C++是一门强大而优雅的编程语言,它既有C语言的高效,又有面向对象的优雅。虽然学习C++有一定难度,但只要坚持下去,你一定会感受到它的魅力。
记住,编程不是一蹴而就的,需要日积月累。不要害怕犯错,每个错误都是成长的机会。就像我当年学习C++时,也经常遇到各种问题,但每次解决一个问题,都让我离目标更近一步。
最后,送给大家一句话:
"编程不是关于你写了多少行代码,而是关于你解决了多少问题。"
希望这篇博客能帮助你开启C++学习之旅。