C++ 简介
C++ 是一种静态类型的、编译式的、通用的编程语言,支持过程化编程、面向对象编程和泛型编程。它被认为是一种中级语言,综合了高级语言和低级语言的特点。
C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。最初命名为带类的 C,后来在 1983 年更名为 C++。它是 C 的一个超集,任何合法的 C 程序都是合法的 C++ 程序。
核心特性
- 封装:将数据和方法组合在一起,对外部隐藏实现细节,只公开接口,提高安全性和灵活性。
- 继承:从已有类中派生出新类,新类具有已有类的属性和方法,并可扩展或修改,提高代码复用性。
- 多态:同一种操作作用于不同的对象,可以有不同的解释和实现,提高代码的灵活性和可读性。
- 抽象:从具体实例中提取共同特征,形成抽象类或接口,让程序员专注于高层次设计。
标准库与 ANSI 标准
标准的 C++ 由三个重要部分组成:核心语言(提供构件块)、C++ 标准库(提供文件、字符串等操作函数)以及标准模板库(STL,提供数据结构操作方法)。ANSI 标准确保了 C++ 的便携性,使代码能在不同操作系统上通过编译。
命名空间
在大规模程序设计中,为了避免标识符命名冲突,标准 C++ 引入了 namespace(命名空间)。
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}
注意:endl 中的最后一个字符是字母小写 L,不是数字 1。
命名空间示例
namespace A {
int a = 100;
}
namespace B {
int a = 200;
}
void test() {
cout << "A 中 a = " << A::a << endl; // 输出 100
cout << "B 中 a = " << B::a << endl; // 输出 200
}
初学者可先掌握基本用法,后续再深入探讨作用域解析的细节。
基本语法结构
C++ 程序由对象集合组成,对象通过调用彼此的方法进行交互。以下是程序的典型结构:
#include <iostream> // 包含输入输出流头文件
using namespace std; // 使用标准命名空间
int main() { // 主函数,程序从这里开始执行
cout << "Hello World"; // 输出消息
return 0; // 终止函数,返回 0
}
注释
C++ 支持单行和多行注释,编译器会忽略它们。
- 单行注释:
// - 多行注释:
/* ... */
数据类型
C++ 提供了丰富的内置类型和用户自定义类型。变量保留的是它所存储值的内存位置。
基本内置类型
| 类型 | 关键字 |
|---|---|
| 布尔型 | bool |
| 字符型 | char |
| 整型 | int |
| 浮点型 | float |
| 双浮点型 | double |
| 无类型 | void |
| 宽字符型 | wchar_t |
类型修饰符
| 修饰符 | 描述 | 示例 |
|---|---|---|
signed | 有符号类型(默认) | signed int x = -10; |
unsigned | 无符号类型 | unsigned int y = 10; |
short | 短整型 | short int z = 100; |
long | 长整型 | long int a = 100000; |
const | 常量,值不可修改 | const int b = 5; |
volatile | 禁止编译器优化 | volatile int c = 10; |
常见类型大小参考
注意:不同系统会有所差异,一字节为 8 位。默认情况下,int、short、long 都是带符号的。
| 数据类型 | 大小(字节) | 范围/取值示例 |
|---|---|---|
bool | 1 | true 或 false |
char | 1 | -128 到 127 |
int | 4 | -2,147,483,648 到 2,147,483,647 |
float | 4 | 约 ±3.4e±38 |
double | 8 | 约 ±1.7e±308 |
C++11 新增类型
| 数据类型 | 描述 | 示例 |
|---|---|---|
auto | 自动类型推断 | auto x = 10; |
nullptr | 空指针常量 | int* ptr = nullptr; |
std::initializer_list | 初始化列表类型 | std::initializer_list<int> list = {1, 2, 3}; |
派生与标准库类型
除了基本类型,还有数组、指针、引用、结构体、类等派生类型,以及 std::string、std::vector 等标准库容器。
变量定义与作用域
定义与声明
变量定义告诉编译器创建变量的存储,而声明向编译器保证变量存在。
int i, j, k; // 定义并声明
extern int a, b; // 外部声明
int d = 3, f = 5; // 定义并初始化
左值与右值
- 左值(lvalue):指向内存位置的表达式,可出现在赋值号左边。
- 右值(rvalue):存储在内存地址的数值,不能赋值。
int g = 20; // 有效
10 = 20; // 无效,编译错误
作用域分类
- 局部作用域:在函数或代码块内部声明,仅在该范围内有效。
- 全局作用域:在所有函数外部声明,整个程序可用。
- 块作用域:在
{}代码块内声明,块结束即销毁。 - 类作用域:在类内部声明,可通过类名访问。
#include <iostream>
int main() {
int a = 10;
{
int a = 20; // 块作用域变量
std::cout << "块变量:" << a << std::endl;
}
std::cout << "外部变量:" << a << std::endl;
return 0;
}
注意:如果在内部作用域声明同名变量,内部变量将覆盖外部变量。
实战:简易计算器
通过编写一个控制台计算器,我们可以综合运用输入输出、逻辑判断和函数定义。
#include <iostream>
#include <limits>
using namespace std;
// 函数声明
double add(double a, double b);
double subtract(double a, double b);
double multiply(double a, double b);
double divide(double a, double b);
int main() {
double num1, num2, result;
char op;
char continueFlag = 'y';
while (continueFlag == 'y' || continueFlag == 'Y') {
cout << "===== 简易计算器 =====" << endl;
cout << "请输入第一个数字:";
cin >> num1;
if (cin.fail()) {
cout << "输入错误!请输入有效数字。" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
continue;
}
cout << "请输入运算符 (+、-、*、/):";
cin >> op;
cout << "请输入第二个数字:";
cin >> num2;
if (cin.fail()) {
cout << "输入错误!请输入有效数字。" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
continue;
}
switch (op) {
case '+':
result = add(num1, num2);
cout << num1 << "+" << num2 << "=" << result << endl;
break;
case '-':
result = subtract(num1, num2);
cout << num1 << "-" << num2 << "=" << result << endl;
break;
case '*':
result = multiply(num1, num2);
cout << num1 << "*" << num2 << "=" << result << endl;
break;
case '/':
if (num2 == 0) {
cout << "错误:除数不能为 0 !" << endl;
} else {
result = divide(num1, num2);
cout << num1 << "/" << num2 << "=" << result << endl;
}
break;
default:
cout << "错误:无效的运算符! " << endl;
break;
}
cout << "是否继续计算?(y/n):";
cin >> continueFlag;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "------------------------" << endl;
}
cout << "计算器已退出,感谢使用! " << endl;
return 0;
}
// 函数定义
double add(double a, double b) { return a + b; }
double subtract(double a, double b) { return a - b; }
double multiply(double a, double b) { return a * b; }
double divide(double a, double b) { return a / b; }
学习 C++ 的关键在于理解概念而非死记硬背。通过实践上述示例,你可以更好地掌握变量管理、类型转换及流程控制。


