网站建设必须提供良好的用户体验,开发一个app需要什么条件,衡水营销网站建设,flash素材网站一、对象的生产期
生存期#xff1a;对象从诞生到结束的这段时间生存期分为静态生存期和动态生存期
1.1 静态生存期
对象的生存期与程序的运行期相同#xff0c;则称它具有静态生存期在文件作用域中声明的对象都是具有静态生存期的若在函数内部的局部作用域中声明具有静态…一、对象的生产期
生存期对象从诞生到结束的这段时间生存期分为静态生存期和动态生存期
1.1 静态生存期
对象的生存期与程序的运行期相同则称它具有静态生存期在文件作用域中声明的对象都是具有静态生存期的若在函数内部的局部作用域中声明具有静态生存期的对象则要使用static关键字 局部作用域中静态变量的特点 不会随着每次函数调用而产生一个副本也不会随着函数返回而失效该变量会在各次调用间共享
1.2 动态生存期
非静态变量的对象都具有动态生存期在局部作用域中声明的具有动态生存期的对象也称为局部生存期对象它诞生于声明点结束于声明所在的块执行完毕之时
二、类的静态成员
2.1 类静态成员的特点
用关键字static声明为该类的所有对象共享静态数据成员具有静态生存周期必须在类外定义和初始化用 “ :: ” 来指明所属的类 “ :: ” 是作用域操作符
2.2 为什么需要静态数据成员
示例
#include iostream
using namespace std;// 一个点类点的属性坐标
class Point{
private:int x, y;
public:Point(int x 0, int y 0) : x(x), y(y){ } ~Point() { }int getX() { return x; }int getY() { return y; }
};
上述代码是一个点类的模板每新创建一个点类对象都会调用一次上述函数 每个类的实例都创建都创建一个独立的对象每个对象都复制了类的数据或属性
每个对象管理各自得属性值 假设增加一个需求统计点的总个数。考虑添加一个计数的数据成员 要求 必须在任何时候都能在每个Student对象中使用加法函数当生成一个新的Student实例的时候必须保证所有Student对象都实现了总人数的计数 class Point{
private:int x, y;int count; // 用于记录点的个数
public:Point(int x 0, int y 0) : x(x), y(y){ } ~Point() { }int getX() { return x; }int getY() { return y; }void addCount() { count; }void showCount() {count Object count count endl;}
};上述代码存在的问题 每次新定义一个点类都要手动的修改count值定义第1个则count改为1定义第2个则count改为2同时要将第1个对象的count值改为2定义第3个则count改为3同时要将第1个和第2个对象的count值改为3…… 解决办法指定count为一个静态数据成员 局部静态变量的生存期域程序的运行时间相同count仍然是局部变量可以看成是所有Point对象共享的一般变量 class Point{
private:int x, y;static int count; // 静态数据成员声明用于记录点的个数
public:Point(int x 0, int y 0) : x(x), y(y){ count; } // 每次创建对象时都会自动调用自动将对象个数加1~Point() { count--; } // 每次撤销对象的时候自动调用对象个数自动减1int getX() { return x; }int getY() { return y; }void showCount() {count Object count count endl;}
};// 静态数据成员在类外定义和初始化使用类名限定
int Point::count 0;int main() {Point a(4, 5); // 定义对象a其构造函数会使count加1cout Point A: a.getX() , a.getY();a.showCount(); // 输出对象个数Point b; // 定义对象b其构造函数会使count加1cout Point B: b.getX() , b.getY();b.showCount(); // 输出对象个数return 0;
}三、静态成员函数
类外代码可以使用类名和作用域操作符来调用静态成员函数静态成员函数只能引用属于该类的静态数据成员或静态成员函数
示例
class Point{
private:int x, y;static int count; // 静态数据成员声明用于记录点的个数
public:Point(int x 0, int y 0) : x(x), y(y){ count; } // 每次创建对象时都会自动调用自动将对象个数加1~Point() { count--; } // 每次撤销对象的时候自动调用对象个数自动减1int getX() { return x; }int getY() { return y; }static void showCount() {count Object count count endl;}
};// 静态数据成员在类外定义和初始化使用类名限定
int Point::count 0;int main() {Point a(4, 5); // 定义对象a其构造函数会使count加1cout Point A: a.getX() , a.getY();Point::showCount(); // 输出对象个数Point b; // 定义对象b其构造函数会使count加1cout Point B: b.getX() , b.getY();Point::showCount(); // 输出对象个数return 0;
}