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

一、类的作用域

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;
}
运行结果如下图:



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路漫求索_CUMT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值