类和对象的基础6——类的作用域和生存周期

来源:互联网 发布:附加遗产网络剧百度云 编辑:程序博客网 时间:2024/05/16 17:10

一、类的作用域

1、类的作用域:在类中定义数据成员和函数成员的作用域是整个类,在类外是否可见取决于该类的访问权限(public、protect、private)。


2、分类:按作用域分类的话,可以分为一般类、嵌套类(定义在某个类中)、局部类(定义在某个函数内)。


二、类的生存周期

1、按生存周期由常至短的排:全局对象>静态对象(外部静态>内部静态)>局部对象。


2、各种对象的定义:

(1)全局对象:定义在某个文件中,它的作用域为整个程序。程序开始执行时,调用构造函数创建该对象;当程序结束时,程序调用析构函数释放该对象。


(2)静态对象:其作用域也是整个文件,它与全局对象的区别在于,静态对象由于有static的限制,所以只能作用于本文件中;而全局对象则不同,在其他文件中要使用该变量                                的话,用extern进行外部声明即可。静态按作用域的不同可分为内部静态对象和外部静态对象。内部静态对象的作用域是定义该对象的函数体类或者分程序                                      内,外部静态对象的作用域就是定义该对象的文件内。


(3)局部对象:局部对象一般定义在一个函数体内或者一个分程序中。


三、例子:验证各种对象的作用域以及生存周期。

/*******************************************************时间:2016年10月2日14:32:12功能:用于验证全局变量、静态变量、局部变量之间的关系********************************************************/#include <iostream>using namespace std;class Car {public:Car(char *pn);      //构造函数~Car();             //析构函数private:char name[10];};Car::Car(char *pn){if(pn != 0){strcpy(name,pn);cout<<"call the "<<name<<" constructor"<<endl;}}Car::~Car(){printf("call the %s Deconstructor\n",name);//cout<<"call the"<<name<<" Deconstructor"<<endl;  //这里未用cout是因为cout会先于全局对象析构}void func(){Car c1("func car");   //局部对象static Car c2("innerStatic Car");  //内部静态对象cout<<"in the func"<<endl;}Car c3("Global Car");      //全局对象static Car c4("externStatic Car");  //外部静态对象void main(){Car c5("main car");cout<<"before call the func function"<<endl;func();                  //从结果来看函数对象在函数调用时初始化,函数结束时释放cout<<"after call the func function"<<endl;}
运行结果如下图:



0 0
原创粉丝点击