版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
标识符的作用域和可见性
1 作用域
函数原型作用域
局部作用域
类作用域
命名空间作用域
2 可见性
命名空间作用域>类作用域>局部作用域
对象生存期
定义时未指定初值的基本类型静态生存期变量会被赋予0初始化,而对于动态生存期变量则不一定。
- 静态生存期:对象的生存期与程序的运行期相同,只会初始化一次。
static int i=5;
- 动态生存期:局部生存期对象诞生于声明点,结束于声明所在的块执行完毕之时。每次进入函数都会初始化。
类的静态成员
- 静态数据成员不属于任何一个对象,可以通过
类名::标识符
来进行访问。 - 静态成员函数可以通过类名或者对象名来调用,而非静态成员函数只能通过对象名来调用。
- 书上P158页,要是第二遍复习的时候不知道这里是啥就再吧代码例子敲一遍吧。
类的友元
- 友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
- 友元函数是在类中用关键字friend修饰的非成员函数。
- 在它的函数体中可以通过对象名访问类的私有和保护成员。
- 若A类是B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。
- 友元关系不能传递、是单项的、不能被继承的。
class Point{
public:
...
friend float dist(Point &p1, Point &p2);//友元函数声明
private:
int x,y;
};
float dist(Point &p1, Point &p2){
double x=p1.x-p2.x;
...
return static_cast<float>(sqrt(x*x+y*y));
}
int main()
{
...
cout<<dist(m1,m2)<<endl;
}
共享数据的保护
1 常对象
- 常对象必须进行初始化,而且不能被更新。
- 不能通过常对象调用普通的成员函数
class A{};
const A a(3,4);//a是常对象,以后不能被更新
const int n=10;//正确,用10对常量n进行初始化
n=20;//错误,不能对常对象赋值。
2 常成员函数
- const 是函数类型的一个组成部分,因此在函数定义部分也要带const关键字
- 常对象智能调用它的常成员函数,而不能调用其他成员函数。
- 无论是否通过常对象调用函数,在常成员函数调用期间,目的对象都被视为常对象,因此常成员函数不能更新目的对象的数据成员,也不能针对目的对象调用该类中没有用const修饰的成员函数。
- const可以用于函数重载,通过非const的对象调用该函数,两个重载的函数都可以与之匹配,这时编译器将选择最近的重载函数。
void print();
void print() const;
3 常数据成员
class A{
public:
A(int i);
void print();
private:
const int a;
static const int b;//静态常数据成员
};
const int A::b=10;//静态常数据成员在类外说明和初始化
A::A(int i)::a(i){} //常数据成员只能通过初始化列表,来获取初值,不可以在{}初始化
常引用
- 常引用所引用的对象不能被更新。
const Point &p1;
多文件结构和编译预处理命令
- 命名空间作用域中的变量都默认是外部变量
- 外部变量要被用时,需要加extern。
标准C++库
- 输入输出类
- 容器类与ADT(抽象数据类型)
- 存储管理类
- 算法
- 错误处理
- 运行环境支持