4.1 变量的类型
1. 4.1.1 全局变量与局部变量
- 局部变量:定义在函数/代码块内部,仅当前代码块可用,生命周期随代码块结束销毁;
- 全局变量:定义在所有函数外部,整个程序文件可见,程序运行全程存在。
2. 4.1.2 变量的存储类型
四类存储修饰符: auto 、 static 、 register 、 extern ,分别控制变量存储位置、生命周期、作用域。
3. 4.1.3 变量在内存中的存储
内存分区:栈(局部auto变量)、堆(动态内存new)、全局/静态区(全局、static变量)、常量区(字符串字面量)。
4.2 标识符的作用域与可见性
1. 4.2.1 函数原型作用域
仅在函数声明行括号内有效,参数名仅作提示,声明和定义参数名可不一致。
2. 4.2.2 块作用域
大括号 {} 包裹的代码块内定义变量,出括号直接失效,循环、if、函数内部都属于块作用域。
3. 4.2.3 文件作用域
函数外定义的全局标识符,从定义行到文件末尾全程可见, extern 可跨文件访问。
4. 4.2.4 可见性
内层作用域同名变量会屏蔽外层同名标识符,内层优先使用自身变量,外层变量暂时不可见。
4.3 程序的文件结构与编译预处理命令
预处理指令以 # 开头,编译阶段提前处理,不参与程序运行。
1. 4.3.1 文件包含 #include
- #include <头文件> :读取系统标准库头文件;
- #include "自定义文件" :读取项目内自定义头文件。
2. 4.3.2 不带参数的宏定义 #define NAME 内容
简单文本替换,预处理阶段直接替换文本,无类型检查。
3. 4.3.3 带参数的宏定义 #define FUNC(a,b) 表达式
支持形参替换,注意括号规避运算符优先级错误。
4. 4.3.4 条件编译
#ifdef / #ifndef / #else / #endif ,根据宏是否定义选择性编译代码,常用于跨平台、调试开关。
4.4 名字空间 namespace
解决全局命名冲突,将变量、函数、类封装在独立命名空间内,使用 命名空间::标识符 访问;标准库全部放在 std 命名空间。
本章核心考点总结
1. 区分全局/局部、static自动变量的生命周期、内存分区;
2. 多层作用域屏蔽规则、四种作用域范围;
3. 三大预处理指令(include、宏、条件编译)用法与坑点;
4. namespace 命名空间的作用与基础使
#include<iostream>
#include<cmath>
using namespace std;
class Point{
private:
double x,y;
public:
// 带默认参数的构造函数,初始化坐标点
Point(double x=0,double y=0):x(x),y(y){}
// 成员函数:计算两点的距离
double Distance(const Point &p) const
{
double dx=x-p.x;
double dy=y-p.y;
return sqrt(dx*dx+dy*dy);
}
};
int main()
{
cout<<"2547102070翟艺佳";
double x1,y1,x2,y2;
cout<<"请输入第一个点的坐标:";
cin>>x1>>y1;
if(cin.fail())
{
cout<<"不能输入字符!"<<endl;
return 0;
}
cout<<"请输入第二个点的坐标:";
cin>>x2>>y2;
if(cin.fail())
{
cout<<"不能输入字符!"<<endl;
return 0;
}
// 使用构造函数创建两个点对象
Point p1(x1,y1);
Point p2(x2,y2);
cout<<"两点之间的距离为:"<<p1.Distance(p2)<<endl;
return 0;
}
用。

1367

被折叠的 条评论
为什么被折叠?



