C++入门指南:从零开始,做一名优秀的程序员

 

目录

 

前言

一、C++是什么?为什么值得学习?

1. C++的"前世今生"

2. C++为什么这么重要?

二、“Hello,world”

2.1. C++和C语言的关系

2. 2 为什么C++的输入输出更友好?

三、命名空间:解决名字冲突的"小助手"

3.1. 为什么需要命名空间?

3.2.命名空间怎么用

四、C++输入输出:比C语言更智能

1. 为什么C++的输入输出更好?

2. 为什么需要  using namespace std; ?

 

五、缺省参数:让函数调用更灵活

5.1. 什么是缺省参数?

2. 缺省参数的规则

六、函数重载:一个名字多种用法

6.1. 什么是函数重载?

6.2. 为什么函数重载这么重要?

七、引用:C++中的"别名"魔法

7.1. 什么是引用?

7.2. 引用的使用场景

7.2.1. 引用传参

7.2.2. 引用作为返回值

3. const引用:安全的引用

八、inline:提升效率的小技巧

8.1. 什么是inline?

8.2. 为什么需要inline?

8.3. inline的注意事项

九、C++学习建议:如何高效学习C++

9.1. 学习难度

9.2. 学习建议

学习书籍推荐:

结语:C++之旅,从这里开始


 

前言

最近这段时间也是开始接触C++了,同时也在接触数据结构,真的是比较忙啊,过俩天在更新《数据结构杂谈》的内容,今天先更新C++的。目前我学习C++的方式主要是看书,在B站大学里学习文章后半段内容会推荐一些C++的书籍,感兴趣的可以看一下。

我特别想跟大家分享一下我的学习心得。今天,我将用最通俗易懂的语言,带你们走进C++的奇妙世界,让C++不再那么神秘莫测。无论你是编程小白,还是刚接触过一点编程,这篇博客都会让你对C++有一个全新的认识。

一、C++是什么?为什么值得学习?

1. C++的"前世今生"

C++可不是突然冒出来的,它的故事要从1979年说起。当时,一位叫Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)的程序员在贝尔实验室工作。他发现C语言在处理复杂项目时有点"力不从心",就像用一把小刀去砍大树,虽然能砍,但效率太低。

于是,他决定在C语言的基础上,增加一些"魔法",让编程变得更高效、更有趣。1983年,他把这种新语言命名为"C++"("++"表示递增,寓意C语言的升级版)。

C++的诞生,就像给程序员们配了一把"瑞士军刀",既有C语言的高效,又有面向对象编程的优雅。它就像一个全能选手,能胜任各种编程任务。

2. C++为什么这么重要?

C++在编程界的地位,就像"老大哥"一样重要。我们来看看它的应用领域:

  • 游戏开发:几乎所有主流游戏引擎(如Unreal Engine、Unity)都是用C++写的
  • 音视频处理:FFmpeg、WebRTC等音视频处理库都是C++实现的
  • 系统软件:操作系统(Windows、Linux)、编译器、数据库等核心系统
  • 金融交易:高频交易系统对性能要求极高,C++是首选
  • 嵌入式系统:智能手表、扫地机器人、车载系统等

二、“Hello,world”

2.1. 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; :使用标准命名空间,让 coutendl 等可以直接使用
  • cout :C++的输出流,相当于C语言的printf
  • << :流插入运算符,用于将数据插入到输出流中
  • endl :换行并刷新缓冲区,相当于C语言的\n

2. 2 为什么C++的输入输出更友好?

C语言的printfscanf需要手动指定格式,比如printf("%d", a),而C++的cout可以自动识别变量类型:

int a = 10;
double b = 3.14;
cout << a << " " << b << endl; // 输出:10 3.14

这就像C++自带了一个"智能助手",能自动判断你输出的是什么类型,不需要你手动指定格式。

三、命名空间:解决名字冲突的"小助手"

3.1. 为什么需要命名空间?

在C语言中,如果两个文件定义了同名的函数或变量,编译器就会报错,就像两个同学都叫"小明",老师很难区分谁是谁。

// 文件1
int rand = 10;

// 文件2
int rand = 20; // 编译错误:重复定义

C++引入了命名空间(namespace),就像给每个人分配了一个"家庭",在同一个家庭内可以有同名的人,但不同家庭之间不会冲突。

3.2.命名空间怎么用

// 定义命名空间
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++输入输出:比C语言更智能

1. 为什么C++的输入输出更好?

C语言的输入输出需要手动指定格式,比如scanf("%d", &a),而C++的cin可以自动识别变量类型:

int a;
doubie b;
cout << a << b;  //能够自动识别 a是 int 型,b是 double型

这就像C++的输入输出自带了"智能识别"功能,不需要你费心指定格式。

2. 为什么需要  using namespace std

C++标准库中的所有函数和对象都放在std命名空间中,比如coutcinendl等。using namespace std;就是把std命名空间中的所有内容"导入"到当前作用域,这样我们就可以直接使用coutcin等,而不需要写std::cout

提醒:在实际项目中,我们不建议使用using namespace std;,因为它可能引起名字冲突。但在学习阶段,为了方便,可以暂时使用。

 

五、缺省参数:让函数调用更灵活

5.1. 什么是缺省参数?

缺省参数是指在函数声明或定义时,给参数指定一个默认值。调用函数时,如果没有指定实参,就使用这个默认值。

#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;
}

运行结果:

2. 缺省参数的规则

  • 全缺省:所有参数都有默认值
  • 半缺省:部分参数有默认值,但必须从右往左连续缺省
//正确形式,半缺省,从右往左连续
void func(int a,int b =10,int c =20){……}
//错误形式,半缺省,从右往左不连续
void fanc(int a=10,int b,int c =20){……}

六、函数重载:一个名字多种用法

6.1. 什么是函数重载?

函数重载是指在同一个作用域中,可以定义多个同名函数,但它们的参数列表不同(参数个数不同或类型不同)。调用时,编译器会根据传入的参数自动选择合适的函数。

// 参数类型不同
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;
}

6.2. 为什么函数重载这么重要?

函数重载让代码更简洁、更易读。比如,我们想计算两个数的和,不管它们是整数还是浮点数,都可以用Add函数,不需要写AddIntAddDouble等。

小贴士:记住,返回值类型不同不能作为函数重载的条件。因为调用函数时,编译器无法通过返回值类型来确定调用哪个函数。

七、引用:C++中的"别名"魔法

7.1. 什么是引用?

引用不是新定义一个变量,而是给已存在变量取了一个别名。引用和它引用的变量共用同一块内存空间。

int a=0;
int &b =a;  //b是a的一个小名
int &c =a;  //c也是a的一个小名

引用的特性

  • 引用在定义时必须初始化
  • 一个变量可以有多个引用
  • 引用一旦引用一个实体,就不能再引用其他实体

 

7.2. 引用的使用场景

7.2.1. 引用传参

引用传参可以避免拷贝,提高效率。比如,交换两个变量的值:

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;
}

7.2.2. 引用作为返回值

引用可以作为函数的返回值,允许修改被引用的对象。

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;
}

3. const引用:安全的引用

const引用可以引用常量,也可以引用普通变量,但引用的变量不能被修改。

int a = 10;
const int &ra = a; // ra是a的常引用
// ra = 20; // 错误:不能修改常引用

const引用还特别适合用于函数参数,可以避免不必要的拷贝,同时保证不修改原数据。

void Print(const int &a) {
    cout << a << endl;
}

八、inline:提升效率的小技巧

8.1. 什么是inline?

inline是C++中的一个关键字,用于修饰函数,表示这个函数是内联函数。编译器在调用内联函数时,会直接将函数体展开,而不是像普通函数那样建立栈帧。

inline int Add(int x, int y) {
    return x + y;
}

8.2. 为什么需要inline?

普通函数调用需要建立栈帧,有额外的开销。对于频繁调用的短小函数,使用inline可以避免这个开销,提高效率。

8.3. inline的注意事项

  • inline只是建议,编译器可以选择不展开
  • inline不适合递归函数和代码较长的函数
  • inline不建议声明和定义分离到两个文件

九、C++学习建议:如何高效学习C++

9.1. 学习难度

⾸先第⼀个问题,C++难学吗?⾸先在这⾥告诉⼤家C++是⼀个相对难学难精的语⾔,相⽐其他⼀些语⾔,学习难度要⾼⼀些要陡峭⼀些,这⾥有历史包袱的问题,也有语⾔本⾝设计和发展历史的问题。 ⽹上以前⼀直流传下⾯这个21天内⾃学精通C++的梗。
 

C++确实比一些语言难学一些,但不要害怕!它就像一座山,虽然陡峭,但登顶后的风景非常壮丽。

学长经验:C++学习曲线比较陡峭,但一旦掌握了核心概念,后面的路就会顺畅很多。

9.2. 学习建议

  1. 每节课下来把课堂讲过的样例都练习一遍:动手实践是学习编程的最好方式
  2. 每节课总结笔记:整理笔记能帮助你加深理解
  3. 不要死记硬背:理解概念比记忆代码更重要
  4. 多写代码:编程是实践性很强的技能,多写才能熟练

 

学习书籍推荐:

  1. 《C++ Primer》:经典的C++语法书,适合中后期作为参考
  2. 《STL源码剖析》:从底层实现角度剖析STL,适合中后期学习
  3. 《Effective C++》:55个C++高效使用条款,适合中后期阅读

结语:C++之旅,从这里开始

C++是一门强大而优雅的编程语言,它既有C语言的高效,又有面向对象的优雅。虽然学习C++有一定难度,但只要坚持下去,你一定会感受到它的魅力。

记住,编程不是一蹴而就的,需要日积月累。不要害怕犯错,每个错误都是成长的机会。就像我当年学习C++时,也经常遇到各种问题,但每次解决一个问题,都让我离目标更近一步。

最后,送给大家一句话

"编程不是关于你写了多少行代码,而是关于你解决了多少问题。"

希望这篇博客能帮助你开启C++学习之旅。

 

 

                 

 

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值