C++ 初阶 学习博客

前言

我会把 C++ 的知识点、学习心得整理成这篇博客。我也是初学者,文章难免有错漏,欢迎大家指正,一起进步!

本文是C++ 初阶,只做基础概念讲解,帮大家建立对 C++ 的整体认知,不会深挖底层。

写在前面

日志写在下面,"写在最后" 放文章末尾,不想看干货可以直接翻到最后看心得。

C++ 兼容绝大部分 C 语言语法,但新增大量面向对象特性。我尽量不用晦涩教科书话术,多用 "人话" 讲清楚概念。

日志

  • 26‑09‑19:初稿完成,补充 C++ 输入输出,命名空间,引用,类与对象基础。
  • 后续更新:STL、构造函数细节、运算符重载等。

一、C++ 是什么?

C++ 是在 C 语言基础上扩展出来的编程语言,既保留 C 语言面向过程、高效的特点,又增加面向对象、泛型编程。 C 可以做的 C++ 几乎都可以做;游戏开发、后端、算法竞赛都大量使用 C++。

二、开发环境

1. 编译器

C 语言编译器大部分也支持 C++:

  • Dev‑C++:适合新手练习,简单轻量。文件后缀写 .cpp
  • Visual Studio:报错提示友好,适合写工程。
  • g++(Linux/MinGW),算法竞赛最常用。

注意:源文件后缀:.c是 C 语言;.cpp是 C++。同一个代码,后缀不同编译行为会有差异。

高级语言 → 编译器 → 机器能识别的二进制。C++ 编译流程比 C 多面向对象相关处理。

三、初识 C++

1. 第一个 C++ 程序

cpp 复制代码
#include<iostream>
int main()
{
    std::cout << "hello C++" << std::endl;
    return 0;
}
  1. #include<iostream>:输入输出头文件,代替 C 的stdio.h
  2. main()依旧是程序唯一入口,不能写错成mian
  3. std::cout 控制台打印输出;<<流向运算符
  4. std::endl 换行并且刷新缓冲区。
命名空间 namespace

std是 C++ 标准库命名空间。 每次写std::麻烦,可以展开命名空间:

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
    cout << "hello" << endl;
    return 0;
}

小提示:竞赛经常写using namespace std;;大型工程不建议,容易名字冲突。

2. 数据类型

C++ 完全继承 C 所有基础类型:

cpp 复制代码
char        //字符
short       //短整型
int         //整型
long        //长整型
long long   //长长整型
float       //单精度浮点
double      //双精度浮点
bool        //【C++独有】布尔类型,true真 / false假
  • bool 只有两个值:true(1)false(0),占 1 字节。
  • sizeof() 在 C++ 同样可用,求类型 / 变量所占字节大小。 存储单位依旧:8bit = 1Byte,KB、MB、GB。 内存依旧理解成一个个小黑屋,每个屋子 1 字节,带地址编号。
2.1 auto 类型推导(C++11)

编译器自动识别变量是什么类型,不用手写类型:

cpp 复制代码
auto a = 10;   //a推导为int
auto b = 3.14; //b推导为double

3. 变量 && 常量

生活:一部分值可变,一部分固定不变。

3.1 变量定义

格式和 C 一样:类型 变量名 = 初始值;

cpp 复制代码
int age = 10;
double pi = 3.14;

建议定义就初始化,防止脏数据。

3.2 局部变量、全局变量
  • 全局变量:函数外面定义,整个工程可用。
  • 局部变量:写在{ }大括号内部,仅大括号内有效。 同名的时候,局部优先覆盖全局
C++ 输入输出 cin / cout
cpp 复制代码
int a;
cin >> a;     //键盘读入
cout << a;    //打印输出

不需要 C 语言scanf&取地址,cin 自动处理。

3.3 作用域和生命周期

和 C 语言规则几乎一模一样:

  1. 作用域:变量名字在哪一段代码能用。
    • 局部变量:仅所在{}内部。
    • 全局变量:整个工程。
  2. 生命周期:从创建到销毁。
    • 局部:进入大括号创建,出大括号销毁。
    • 全局:整个程序运行周期。
3.4 常量
  1. 字面常量103.14"abc"
  2. const 修饰常量
cpp 复制代码
const int MAX = 100;
// MAX = 200;  报错,不能修改

对比 C:C++ 的const修饰的是真正常量,可以当数组大小使用。C 语言 const 只是常变量。

3.#define宏常量(C 兼容,C++ 更推荐 const)

cpp 复制代码
#define N 50

枚举常量 enum

C++ 保留 enum,同时新增强类型枚举enum class

cpp 复制代码
enum Color { RED, GREEN, BLUE };

4. 字符串

C 语言靠char[]字符数组 +'\0'C++ 有 std::string 类 ,更加方便,不用关心\0结束符。

cpp 复制代码
#include<string>
string s = "hello world";
cout << s;
  • 需要头文件 #include<string>
  • 可以直接用=赋值,直接比较==,不用 C 语言的strcmp

转义字符和 C 完全一样:\n \t \\ \"等。

5. 判断选择语句

if / else if / elseswitch语法和 C 几乎完全相同。

注意 C++:switch()括号可以是枚举、int;不能用 string

6. 循环语句

  1. for 循环
cpp 复制代码
for(int i=0;i<10;i++)
{

}

C++11 范围 for(遍历容器、字符串)

cpp 复制代码
string str="abc";
for(char ch : str)
{
    cout<<ch;
}

while 循环

cpp 复制代码
while(条件)
{

}

do while

cpp 复制代码
do{

}while(条件);

do while至少执行一次。

break跳出整个循环 /switch;continue跳过本次循环剩余语句。

7. 函数

C++ 函数兼容 C 函数写法,增加新特性。

cpp 复制代码
//函数格式
返回值类型 函数名(参数列表)
{
    return 值;
}

函数重载:同一个函数名,参数个数 / 类型不同,可以构成多个函数(C 语言不支持!)

cpp 复制代码
void show(int x){}
void show(double x){}

调用时编译器根据传入参数自动匹配版本。

  1. 函数默认参数:参数可以给默认值
cpp 复制代码
void func(int a=10)
{

}
//调用可以不传参,a就用10
func();

8. 数组

一维数组语法和 C 兼容

cpp 复制代码
int arr[10] = {1,2,3};

下标依旧从 0 开始

C++11 支持初始化列表。

注意:普通数组大小,C++11 前,不能用变量当数组大小;const 常量可以。

9. 操作符

算术、逻辑、关系运算符和 C 一样。 重点新增:引用 &

cpp 复制代码
int a = 10;
int &ra = a;  //ra是a的别名,ra和a代表同一个内存空间
ra = 100;
//此时a也变成100

引用必须初始化,不能绑定空。和指针*不一样,后面进阶详细讲。

三目运算符 条件 ? 表达式1 : 表达式2 保留。

10. 指针

C++ 完整继承 C 的指针。

cpp 复制代码
int x = 20;
int *p = &x;
cout << *p; //解引用

空指针:nullptr(C++ 推荐,替代 C 的 NULL)

11. 类与对象(C++ 核心,面向对象)

这是 C 和 C++ 最大分水岭。C 是面向过程;C++ 支持面向对象,用类描述复杂事物。

cpp 复制代码
//类的声明
struct Student
{
    int id;
    string name;
    int age;
};

int main()
{
    Student s;
    s.age = 12;
    s.name = "ZhangSan";
    return 0;
}

struct在 C++ 升级,也可以写class

  • 类把属性(变量)、行为(成员函数)打包在一起。
  • .访问对象成员;->指针访问对象成员。

简单理解:C 语言结构体只有变量;C++ 类可以放函数。

cpp 复制代码
class Person
{
public:
    int age;
    void print()
    {
        cout << age << endl;
    }
};

四、总结

C++ 不是完全全新语言,它向下兼容 C。 初阶阶段你可以把 C++ 理解成:C 语言 + bool + string + 命名空间 + 引用 + 函数重载 + 类与对象。

学习建议:

  1. 不要光看,一定要敲代码运行看结果。看懂不等于会写。
  2. 先搞懂面向过程部分,再啃类、对象、构造函数这些面向对象内容。
  3. 遇到报错,认真阅读编译器提示,很多错误一眼就能定位。

写在最后【心得】

C++ 上手门槛比 C 高一点,尤其是类和引用部分,很多初学者会卡在这里。 不要追求一口吃成胖子。初阶先把基础语法练熟,循环数组指针吃透,再慢慢接触面向对象、STL 容器。

自学非常重要,多找 OJ 刷题,练习写简单小程序,遇到问题查资料,慢慢积累。

推荐刷题网站:https://oj.czos.cn/

相关推荐
辛苦才能2 小时前
C++多态原理:虚函数表的内存布局与动态绑定的汇编真相
开发语言·c++
西西弗Sisyphus2 小时前
Qt 实现一个 水波进度球
c++·qt·c
无忧.芙桃2 小时前
数据结构之排序算法(中):冒泡排序与快速排序,从相邻交换到工程级优化
c语言·c++·排序算法
Hhy_11072 小时前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
qq_199886872 小时前
第7板块·第1节:通用算子分类与设计模式
c++·人工智能·gpu算力·cuda
6Hzlia4 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
神仙别闹10 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员10 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
free-elcmacom13 小时前
C语言字符指针与字符串字面量——从一道“剑指 Offer”笔试题说起
c语言·visual studio