目录
一、开篇引入
你是否曾沉浸在《原神》美轮美奂的开放世界中,惊叹于其流畅的画面和丰富的交互体验?又是否对 AlphaGo 击败围棋世界冠军的壮举感到震撼,好奇背后的技术奥秘?其实,这些令人瞩目的成果都离不开 C++ 语言的强大支撑。在游戏开发领域,C++ 凭借其高效的性能和对硬件的直接控制能力,成为构建游戏引擎、实现图形渲染和物理模拟的首选语言,为玩家打造出沉浸式的游戏世界。而在人工智能领域,C++ 同样发挥着关键作用,助力实现复杂的算法和模型,推动着 AI 技术的不断突破。
C++ 的强大之处,源于其丰富的特性和灵活的编程范式,而这一切的基础,便是 C++ 的基本语法。它就像一把钥匙,为我们打开 C++ 编程世界的大门,让我们能够驾驭这门强大的语言,实现各种创意和想法。接下来,就让我们一起踏上 C++ 基本语法的学习之旅,探索其中的奥秘。
二、C++ 关键字
关键字,也被称为保留字,是 C++ 语言中预先定义好的具有特殊含义的标识符。它们就像是 C++ 语言大厦的基石,构建起了整个编程体系的基本框架,用于定义数据类型、控制程序流程、声明函数和类等。在 C++ 中,总共有 70 多个关键字,不过大家不用死记硬背,在学习和实践的过程中,自然而然就能熟悉常用的关键字。下面,我就为大家介绍一些常见的关键字及其用途 。
-
数据类型关键字:用于定义各种数据类型,规定数据的存储方式和取值范围,是构建数据结构的基础。例如int,用于定义整型变量,可表示整数,如int num = 10; ;double用于定义双精度浮点型变量,能精确表示小数,像double pi = 3.1415926; ;char则用于定义字符型变量,用于存储单个字符,比如char ch = 'A'; 。
-
控制流关键字:负责控制程序的执行流程,实现条件判断、循环等逻辑,是程序逻辑的核心。if - else用于条件判断,根据条件的真假执行不同的代码块,例如:
int score = 85;
if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}
for、while和do - while用于循环操作,重复执行一段代码。for循环常用于已知循环次数的情况,像这样:
for (int i = 0; i < 5; i++) {
cout << i << endl;
}
while循环则在条件为真时持续循环,例如:
int num = 0;
while (num < 3) {
cout << num << endl;
num++;
}
do - while循环与while类似,但它会先执行一次循环体,再判断条件,比如:
int count = 0;
do {
cout << count << endl;
count++;
} while (count < 3);
switch - case用于多分支选择,根据表达式的值选择执行不同的分支,例如:
int day = 2;
switch (day) {
case 1:
cout << "星期一" << endl;
break;
case 2:
cout << "星期二" << endl;
break;
default:
cout << "其他" << endl;
}
-
存储类关键字:决定变量或函数的存储方式和生命周期,控制数据的访问和管理。static声明的变量在程序运行期间一直存在,且只初始化一次,例如在函数内部使用static变量记录函数被调用的次数:
void func() {
static int count = 0;
count++;
cout << "函数被调用次数:" << count << endl;
}
extern用于声明变量或函数是在其他文件中定义的,方便在多个文件间共享数据和函数,比如在一个文件中定义int num = 10;,在另一个文件中可以通过extern int num;来使用这个变量 。
-
函数和类相关关键字:在面向对象编程中,用于定义和操作类、对象以及类的成员函数,实现封装、继承和多态等特性。class用于定义类,是面向对象编程的核心,例如:
class Student {
public:
string name;
int age;
void study() {
cout << name << "正在学习" << endl;
}
};
public、private和protected用于指定类成员的访问权限,public成员可以被外部访问,private成员只能在类内部访问,protected成员在类内部和子类中可以访问 。this指针在类的成员函数中使用,指向调用该函数的对象,用于区分成员变量和局部变量,例如:
class Person {
public:
string name;
Person(string name) {
this->name = name;
}
};
virtual用于声明虚函数,实现多态性,使子类可以重写父类的函数,比如:
class Animal {
public:
virtual void sound() {
cout << "动物发出声音" << endl;
}
};
class Dog : public Animal {
public:
void sound() override {
cout << "汪汪汪" << endl;
}
};
三、命名空间
(一)命名空间的作用
在 C++ 的代码世界里,随着项目规模的不断扩大,各种变量、函数和类的数量也日益增多。当不同的模块或者库中出现相同名称的标识符时,就会引发命名冲突,这就好比在一个小镇里,有两个人都叫 “小明”,当你喊 “小明” 的时候,就很难确定你到底在叫谁 。
命名空间就像是为代码世界划分出的一个个独立区域,每个区域都有自己独特的 “标识”。在不同命名空间中的标识符,即使名称相同,也不会相互干扰。就好比把两个 “小明” 分别放在不同的房间里,当你在某个房间喊 “小明” 时,只会对应这个房间里的 “小明”。通过这种方式,命名空间有效地避免了命名冲突,让代码的组织更加清晰、有序 。
(二)命名空间的定义
在 C++ 中,使用namespace关键字来定义命名空间,基本语法如下:
namespace 命名空间名称 {
// 命名空间成员,可以是变量、函数、类等
成员声明;
}
例如,我们定义一个名为MyNamespace的命名空间,并在其中定义一个变量和一个函数:
namespace MyNamespace {
int myVariable = 10;
void myFunction() {
std::cout << "This is myFunction in MyNamespace" << std::endl;
}
}
命名空间还可以进行嵌套,即一个命名空间中包含另一个命名空间,如下所示:
namespace OuterNamespace {
int outerVariable = 20;
namespace InnerNamespace {
int innerVariable = 30;
void innerFunction() {
std::cout << "This is innerFunction in InnerNamespace" << std::endl;
}
}
}
在同一个工程中,允许存在多个相同名称的命名空间,编译器会将它们合并为同一个命