第一部分 基本语言 第七章 函数(7.5局部对象)

7.5局部对象

C++语言中,每个名字有作用域,每个对象同样有生命期。两者的含义分别是:

1、名字的作用域是指:知道该名字的程序文本区。

2、对象的生命期是指:该对象的存在时间。

一、自动对象:

默认情况下,局部变量的生命期取决于调用该变量所在函数的执行时,定义该变量的语句被调用时才存在的对象称为自动对象。自动对象在每次调用所在函数时被创建,函数结束时被撤销。如果定义语句提供初始值,则每次调用每次都会给出初始值。

形参也是自动对象,形参所占用的存储空间在创建时给出,在函数结束时释放。

所以函数结束后,形参和自动对象都不能被访问。

二、静态局部对象:

静态局部对象在函数内,但生命期跨越了函数的生命期,这样的局部对象叫静态局部对象

形式:

static对象名;

静态局部对象在第一次调用定义语句时生成,在整个程序结束之前一直有效。如果函数被多次调用,静态局部对象会保持它的值并更新值。

程序示例:

#include <iostream>


using namespace::std;


int count()

{

staticint a=1;

return ++a;

}


int main(int argc,constchar * argv[])

{

for (int i=0; i<=20; ++i) {

count();

}

cout<<"count calls"<<count()<<endl;

return0;

}

程序中count函数计算自己被调用的次数,每次调用,static对象a的值保持更新,并不随函数的结束而释放内存,而是等整个程序结束,或者释放静态对象时结束。




习题解答:

1、解释形参,局部变量,和静态局部变量的差别,并给出一个有效使用这三种变量程序的例子

答: 1、形参,自动生成对象,声明形式参数。不占内存。只有在定义并初始化形参时才为形参分配内存。函数结束后释放内存。

2、局部变量,在程序文本中的位置处于语句块内,调用函数初始化时变量生成并分配内存,函数结束内存释放。

3、静态局部变量,在程序中处于语句块内,在程序第一次调用函数时分配内存,保持其值并随着调用而不断更新,在程序结束或者释放静态变     量时释放内存。

程序示例:


#include <iostream>


using namespace::std;


int a;

static int b=0;

int count()

{

staticint a=0;

++b;

++a;

cout<<"a is: "<<a<<" b is:"<<b<<endl;

return a;

}


int main()

{

for (int b=1; b<=10; ++b) {

cout<<"a value: "<<a<<endl;

count();

}

cout<<"a value is: "<<a<<" b value is: "<<b<<endl;

return0;

}


程序运行结果:

a value: 0

a is: 1 b is:1

a value: 0

a is: 2 b is:2

a value: 0

a is: 3 b is:3

a value: 0

a is: 4 b is:4

a value: 0

a is: 5 b is:5

a value: 0

a is: 6 b is:6

a value: 0

a is: 7 b is:7

a value: 0

a is: 8 b is:8

a value: 0

a is: 9 b is:9

a value: 0

a is: 10 b is:10

a value is: 0 b value is: 10


如上程序所示:a为静态局部变量,a的值只在调用a所在函数时保持其值更新,直接输出a是保持静态原值。b为全局静态变量值随函数改变,并且全局可调用。


2、编写函数,使其在第一次调用时返回0,然后再次调用按顺序产生正整数。


程序示例:

#include <iostream>


using namespace::std;


static int a=0;

int count()

{

cout<<"a is: "<<a<<endl;

a++;

returna;

}


int main()

{

for (int b=1; b<=10; ++b) {

count();

}

cout<<a<<endl;

return0;

}


程序运行结果:


a is: 0

a is: 1

a is: 2

a is: 3

a is: 4

a is: 5

a is: 6

a is: 7

a is: 8

a is: 9

10




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值