坐稳了,我们的C++重生之旅现在正式发车!请系好安全带,前方高能,但绝对有趣!
🚀 重生之我在10天内卷赢C++ – DAY 1
导师寄语:嘿,未来的编程大神!欢迎来到C++的世界。我知道,你现在可能对着黑乎乎的命令行窗口,心里犯嘀咕:“这玩意儿能干啥?” 别急,这扇黑色的门背后,是一个由你创造的、充满无限可能的奇幻世界。今天,我就带你拿到第一把钥匙,推开这扇门。记住,最牛的黑客,也是从第一行 Hello, World! 开始的。Let’s Go!
🎯 今日目标
1. C++的“前世今生” (听个故事,放松一下)
想象一下,你有一辆老式的手动挡汽车,它叫 C语言。这车性能强劲,速度飞快,能让你完全掌控每一个零件。但问题是,开起来太费劲了!换挡、离合,一不小心就熄火,新手司机直接劝退。
后来,一个叫Bjarne Stroustrup的大佬觉得:“这不行啊,我得给这车升个级!” 于是,他在C语言的基础上,加装了“自动挡”、“导航系统”、“安全气囊”等等一大堆现代化的玩意儿,并给它取了个新名字,叫 C++ (C Plus Plus,就是比C更强一点的意思)。
所以,C++是什么?
- 它是C语言的“超级进化版”:你能在C里做的,C++基本都能做。
- 它更强大、更安全:它引入了**面向对象(OOP)**等高级特性,让你能像搭乐高一样组织代码,开发大型项目时不再一团乱麻。
- 它性能依然是王者:它被广泛用于游戏引擎、桌面软件、服务器开发等一切需要“快”的领域。
我们学C++,就像直接学开一辆现代化的“自动挡性能车”,既能体验速度与激情,又不会被复杂的操作搞得手忙脚乱。
2. 磨刀不误砍柴工:搭建开发环境
在Linux下,我们的“开发三件套”就是:命令行终端、Vim编辑器、g++编译器。
2.1 Linux命令行:你的数字世界导航仪
忘掉鼠标吧!在Linux世界,命令行是最高效的工具。它就像你和电脑之间的“密语”,你输入指令,它立即执行。
打开你的终端(通常是按 Ctrl+Alt+T),我们来学几个“咒语”:
-
pwd (Print Working Directory):“我在哪儿?”
- 输入 pwd แล้ว按回车,它会告诉你当前所在的文件夹路径。
$ pwd
/home/your_username -
ls (List):“这里有啥?”
- 输入 ls,它会列出当前文件夹下的所有文件和文件夹。
$ ls
Desktop Documents Downloads Music Pictures -
mkdir (Make Directory):“给我造个新窝!”
- 我们来为我们的C++学习创建一个专属文件夹。
$ mkdir cpp_journey
-
cd (Change Directory):“走,去那儿!”
- 进入我们刚创建的文件夹。
$ cd cpp_journey
$ pwd # 再确认一下位置
/home/your_username/cpp_journey
恭喜!你已经掌握了在文件系统中“瞬间移动”的能力!
2.2 Vim编辑器:键盘流的“上古神器”
Vim是一个纯键盘操作的文本编辑器。初见时可能觉得它很奇怪,但一旦熟悉,你的编码速度会起飞。
Vim的“三步走”魔法,记住它就能完成80%的工作:
打开/创建文件:vim 文件名
- 我们在 cpp_journey 文件夹下,创建一个叫 hello.cpp 的文件。
$ vim hello.cpp
现在你进入了Vim的正常模式 (Normal Mode)。在这个模式下,你不能直接打字,按键会被当成命令。
进入编辑模式:按一下 i 键
- i 代表 Insert (插入)。按下后,左下角会出现 — INSERT — 字样。现在,你就可以像在记事本里一样,自由地输入代码了!
保存并退出:
- 首先,按 Esc 键,退出编辑模式,回到正常模式。
- 然后,输入冒号 :,接着输入 wq,最后按回车。
- w 代表 write (写入/保存)
- q 代表 quit (退出)
- :wq 就是 “保存并退出” 的意思。
小贴士:如果玩坏了,想不保存就强制退出,可以按 Esc 后输入 :q!。这个 ! 就像在说:“我不管,就是要走!”
2.3 g++编译器:你的代码“翻译官”
你写的C++代码(.cpp文件),计算机是看不懂的。它只懂0和1组成的机器码。g++ 就是一个伟大的“翻译官”,它能把你的代码翻译成计算机能执行的文件。
检查一下你的“翻译官”在不在:
$ g++ –version
如果显示出一大堆版本信息,说明它已经就位。如果没有,就用下面这条命令请它出山(需要输入你的系统密码):
$ sudo apt-get update
$ sudo apt-get install g++
sudo 就像是在说:“我是管理员,我说了算!”
3. 宇宙第一定律:Hello, World!
环境就绪,万事俱备!现在,让我们写下编程世界的开篇诗篇。
第一步:用Vim编写代码
$ cd ~/cpp_journey # 确保在我们的工作目录
$ vim hello.cpp
第二步:按 i 进入插入模式,输入以下代码
// 这是我的第一个C++程序
#include <iostream>
int main() {
// 在屏幕上打印 "Hello, C++ World!"
std::cout << "Hello, C++ World!" << std::endl;
return 0; // 告诉系统,程序圆满结束
}
第三步:按 Esc,输入 :wq 保存退出
第四步:召唤 g++ 翻译官进行编译
$ g++ hello.cpp -o hello
- g++ hello.cpp:告诉编译器去翻译 hello.cpp 文件。
- -o hello:-o 是 output (输出) 的意思,表示请把翻译好的可执行文件命名为 hello。如果不加这个,默认会生成一个叫 a.out 的文件。
编译成功后,ls 一下,你会发现多了一个绿色的、名为 hello 的文件。它就是我们程序的“真身”!
第五步:运行你的程序!
$ ./hello
- ./ 表示“当前目录下”,./hello 就是运行当前目录下的 hello 程序。
终端上会立刻显示:
Hello, C++ World!
🎉🎉🎉 恭喜你!你已经正式成为一名程序员了!🎉🎉🎉
代码逐行解剖:
- #include <iostream>:引入工具箱。iostream 是一个包含了输入(input)和输出(output)功能的“工具箱”。cout 这个工具就放在里面。
- int main():程序的唯一入口。操作系统运行你的程序时,会先找 main 函数,从这里开始执行。一个程序只能有一个 main 函数,就像一栋房子只有一个正门。
- { … }:函数的地盘。花括号里的所有内容,都属于 main 函数。
- std::cout << "…" << std::endl;:输出指令。
- std::cout 是“标准输出流”,你可以把它想象成一个连接到屏幕的“大喇叭”。
- << 是“流插入运算符”,像个传送带,把右边的东西送到左边的 cout 喇叭里播放出去。
- std::endl 是一个特殊指令,表示“换个行,然后刷新一下”。
- return 0;:汇报工作。向操作系统报告:“报告老板,任务圆满完成,一切正常!” 返回 0 是一个约定俗成的成功信号。
- // …:注释。这两行是写给你自己和别人看的,编译器会直接忽略它们。我们稍后会详细讲。
4. C++的“基本积木”:变量与数据类型
程序光会打招呼可不够,它得能记住东西。变量 (Variable) 就是程序用来存放数据的“小盒子”。
每个盒子都有类型,规定了它能装什么东西,以及盒子有多大。
int | integer | 整数 | int age = 18; |
double | double-precision | 小数(浮点数) | double price = 19.99; |
char | character | 单个字符 | char grade = 'A'; (注意是单引号) |
bool | boolean | 真或假 | bool is_handsome = true; |
std::string | string | 一串字符(字符串) | std::string name = "卷王"; (注意是双引号) |
实践一下:
创建一个新文件 variables.cpp,把你的个人信息存起来。
#include <iostream>
#include <string> // 使用string需要这个头文件
int main() {
// 声明并初始化变量
std::string name = "C++小萌新";
int age = 1;
double height = 1.75; // 单位:米
char gender = 'M';
bool is_learning = true;
// 把这些信息打印出来
std::cout << "姓名: " << name << std::endl;
std::cout << "年龄: " << age << "岁" << std::endl;
std::cout << "身高: " << height << "米" << std::endl;
std::cout << "性别: " << gender << std::endl;
std::cout << "正在学习C++吗? " << is_learning << std::endl; // bool会打印出 1 (true) 或 0 (false)
return 0;
}
编译运行:
$ g++ variables.cpp -o vars
$ ./vars
看看输出是不是你的个人信息?
5. 与程序互动:标准输入与输出
你的程序现在会“说”了,我们再教它怎么“听”。
- std::cout 是输出(说)。
- std::cin 是输入(听)。
cin (see-in) 使用 >> 运算符,方向和 cout 相反,表示把从键盘输入的数据“灌”进变量里。
示例:一个会聊天的机器人
创建 chat.cpp:
#include <iostream>
#include <string>
int main() {
std::string user_name;
int user_age;
std::cout << "你好! 我是你的AI助手,请问你叫什么名字呀? " << std::endl;
std::cin >> user_name; // 等待用户输入名字,并存入user_name
std::cout << "哇," << user_name << ",真是个好名字!你今年多大了呢?" << std::endl;
std::cin >> user_age; // 等待用户输入年龄,并存入user_age
std::cout << "酷!" << user_age << "岁正是学习编程的黄金年龄!加油哦!" << std::endl;
return 0;
}
编译运行,和它聊聊看!
偷懒的艺术:using namespace std;
你可能已经注意到了,每次用 cout, cin, string, endl 都要在前面加上 std::,好麻烦!std 是 standard (标准) 的缩写,表示这些工具都来自C++的“标准库命名空间”。
命名空间 (Namespace) 就像一个姓氏。张家的“三”叫张三,李家的“三”叫李三,可以避免重名冲突。std::cout 就是“std”家的cout。
如果我们确定今天只和“std”一家人打交道,就可以在程序开头声明一下:
#include <iostream>
#include <string>
using namespace std; // 声明:接下来没写姓的,都默认是std家的
int main() {
string name;
cout << "请输入你的名字: "; // 看,不用写std::了
cin >> name;
cout << "你好, " << name << "!" << endl;
return 0;
}
这样是不是清爽多了?
导师提醒:在大型项目中,为了避免命名冲突,不推荐在头文件中使用 using namespace std;。但在我们现在的小练习中,为了方便,大胆用!
6. 成为有“素质”的程序员:注释
注释是写给“人”看的,不是给机器看的。 几个月后,当你回头看自己写的代码,你会感谢今天写下注释的自己。
两种注释方式:
单行注释 //
- 从 // 开始,直到这一行结束,都是注释。
// 这是一个单行注释,用来解释下面这行代码的作用
int a = 10;
多行注释 /* … */
- /* 和 */ 之间的所有内容,不管多少行,都是注释。
/*
这是一个多行注释。
通常用来写一些比较详细的说明,
比如函数的用途、作者信息等等。
作者:卷王导师
日期:2024-01-01
*/
int b = 20;
总结与小贴士
呼!第一天信息量有点大,但你坚持下来了!我们来回顾一下:
- 你认识了C++,你的新朋友。
- 你学会了用ls, cd, mkdir在Linux里“横行霸道”。
- 你用Vim写下了神圣的Hello, World!。
- 你用g++编译并运行了它,感受到了创造的乐趣。
- 你学会了用变量存东西,用cin和cout和程序聊天。
卷王小贴士:
编程遇到问题是100%会发生的事,尤其是编译错误。不要怕那满屏的红色报错信息。仔细读第一行错误,它通常会告诉你哪一行(比如 hello.cpp:5:10:)出了什么问题(比如 missing a semicolon ';' 缺少分号)。解决它,你会获得巨大的成就感!
✍️ DAY 1 作业
- 编写一个程序 my_card.cpp。
- 程序依次询问用户的 姓名(string)、城市(string) 和 幸运数字(int)。
- 最后,程序将这些信息格式化输出,类似下面这样:********************
* 姓名: 张三
* 城市: 北京
* 幸运数字: 8
********************
- 编写一个程序 temp_converter.cpp。
- 程序提示用户输入一个摄氏度(Celsius)温度(可以是小数,所以用 double 类型)。
- 程序计算出对应的华氏度(Fahrenheit)温度并输出。
- 转换公式:F = C * 9.0 / 5.0 + 32。(注意:要用 9.0 / 5.0 而不是 9 / 5,否则整数相除会丢失精度!)
💡 作业答案与解析
1. 个人名片生成器
文件:my_card.cpp
#include <iostream>
#include <string>
// 使用std命名空间,简化代码
using namespace std;
int main() {
// 声明需要的变量
string name;
string city;
int lucky_number;
// 提示并获取用户输入
cout << "欢迎使用个人名片生成器!" << endl;
cout << "请输入您的姓名: ";
cin >> name;
cout << "请输入您所在的城市: ";
cin >> city;
cout << "请输入您的幸运数字: ";
cin >> lucky_number;
// 格式化输出
cout << "\\n— 这是您的专属名片 —" << endl; // \\n也是一个换行符
cout << "********************" << endl;
cout << "* 姓名: " << name << endl;
cout << "* 城市: " << city << endl;
cout << "* 幸运数字: " << lucky_number << endl;
cout << "********************" << endl;
cout << "————————" << endl;
return 0;
}
编译与运行:
$ g++ my_card.cpp -o my_card
$ ./my_card
运行示例:
欢迎使用个人名片生成器!
请输入您的姓名: 卷王
请输入您所在的城市: 上海
请输入您的幸运数字: 666
— 这是您的专属名片 —
********************
* 姓名: 卷王
* 城市: 上海
* 幸运数字: 666
********************
————————
2. 温度转换器
文件:temp_converter.cpp
#include <iostream>
using namespace std;
int main() {
// 声明变量,使用double以支持小数
double celsius;
double fahrenheit;
// 提示用户输入
cout << "请输入摄氏度温度: ";
cin >> celsius;
// 根据公式进行计算
// 使用9.0和5.0确保是浮点数除法,结果更精确
fahrenheit = celsius * 9.0 / 5.0 + 32;
// 输出结果
cout << "您输入的摄氏度 " << celsius << "°C" << endl;
cout << "转换为华氏度是 " << fahrenheit << "°F" << endl;
return 0;
}
编译与运行:
$ g++ temp_converter.cpp -o temp_converter
$ ./temp_converter
运行示例:
请输入摄氏度温度: 25.5
您输入的摄氏度 25.5°C
转换为华氏度是 77.9°F
点个赞和关注,更多知识包你进步,谢谢!!!你的支持就是我更新的最大动力
评论前必须登录!
注册