前言
我会把 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;
}
#include<iostream>:输入输出头文件,代替 C 的stdio.hmain()依旧是程序唯一入口,不能写错成mianstd::cout控制台打印输出;<<流向运算符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 语言规则几乎一模一样:
- 作用域:变量名字在哪一段代码能用。
- 局部变量:仅所在
{}内部。 - 全局变量:整个工程。
- 局部变量:仅所在
- 生命周期:从创建到销毁。
- 局部:进入大括号创建,出大括号销毁。
- 全局:整个程序运行周期。
3.4 常量
- 字面常量 :
10、3.14、"abc" - 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 / else,switch语法和 C 几乎完全相同。
注意 C++:
switch()括号可以是枚举、int;不能用 string。
6. 循环语句
- 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){}
调用时编译器根据传入参数自动匹配版本。
- 函数默认参数:参数可以给默认值
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 + 命名空间 + 引用 + 函数重载 + 类与对象。
学习建议:
- 不要光看,一定要敲代码运行看结果。看懂不等于会写。
- 先搞懂面向过程部分,再啃类、对象、构造函数这些面向对象内容。
- 遇到报错,认真阅读编译器提示,很多错误一眼就能定位。
写在最后【心得】
C++ 上手门槛比 C 高一点,尤其是类和引用部分,很多初学者会卡在这里。 不要追求一口吃成胖子。初阶先把基础语法练熟,循环数组指针吃透,再慢慢接触面向对象、STL 容器。
自学非常重要,多找 OJ 刷题,练习写简单小程序,遇到问题查资料,慢慢积累。
推荐刷题网站:https://oj.czos.cn/