C程序的结构实用.pptx
《C程序的结构实用.pptx》由会员分享,可在线阅读,更多相关《C程序的结构实用.pptx(47页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 块作用域又称局部作用域。由一对花括号“”所括起来的块中声明的标识符的作用域从声明处开始,一直到块结束的花括号为止。例如:#includevoid main()void fun1();int n;for(int i=0;i5;i+)int m;if(i%2)n+;m=n/2;/错误,m未定义 n=i;fun1();/fun1()函数调用 2)块作用域第1页/共47页 void fun1()couti=iendl;/错误,i未定义 编译时,函数fun1()中的语句:couti=iendl;将出现一个未定义错误,这是因为块作用域不能延伸到子函数中。第2页/共47页3)文件作用域#include i
2、nt k;void main()k=5;k+;int k=7;k+;coutk=k;cout“,k=kendl;程序运行结果为:k=8,k=6可见性遵循的一般规则:(1)标识符在引用前必须先声明。(2)在互相没有包含关系的不同作用域中声明同名的标识符时,两标识符互不影响。(3)如果在两个或多个具有包含关系的作用域中声明了同名标识 符,则外层标识符在内层不可见。第3页/共47页1)静态生存期 静态生存期与程序的运行期相同。具有文件作用域的变量具有静态生存期。如果要在函数内部的块作用域中声明具有静态生存期的变量,则要使用关键字static。例如:static int k;具有静态生存期的变量,也称
3、为静态变量。2)局部生存期在块作用域中声明的变量具有局部生存期。此生存期诞生于声明点,而终止于其作用域的结束处。具有局部生存期的变量都具有块作用域。但当在块作用域内将变量说明为静态变量时,该变量则具有静态生存期。3)动态生存期动态生存期由程序中特定的函数(malloc()和free()调用或由操作符(new和delete)创建和释放。具有动态生存期的变量在内存的堆区分配空间。2生存期生存期第4页/共47页3局部变量和全局变量局部变量和全局变量1)局部变量局部变量包括自动(auto)变量、内部静态(static)变量和函数参数。2)全局变量全局变量具有文件作用域。第5页/共47页/EX5_1.c
4、pp:演示局部变量和全局变量#includeint i=1;/全局变量i:静态生存期void main()static int a;/声明局部静态变量a:静态生存期 int b=-10;/声明局部变量b:局部生存期 int c=0;/声明局部变量c:局部生存期 void other(void);/声明函数other()cout“main:i=i a=a b=b c=cendl;c=c+8;other();/调用函数other()cout“main:i=i a=a b=b c=cendl;other();/调用函数other()第6页/共47页void other(void)static int
5、 a=1;/局部静态变量a:静态生存期 static int b;/局部静态变量b:静态生存期 int c=5;/局部变量c:局部生存期 i=i+2;a=a+3;c=c+5;coutother:i=i a=a b=b c=cendl;b=a;程序运行结果为:main:i=1 a=0 b=-10 c=0other:i=3 a=4 b=0 c=10main:i=3 a=0 b=-10 c=8other:i=5 a=7 b=4 c=10第7页/共47页 静态成员为同类的所有对象共同拥有,用于解决同类对象之间数据和函数的共享问题。静态成员分为静态数据成员和静态函数成员。(1)静态数据成员声明:stat
6、ic int n (2)静态数据成员必须要在类外进行初始化,初始化的形式为::=例如:int Point:n=0;(3)静态成员属于类,而不属于任何一个对象;(4)静态成员一样要服从访问控制限制;(5)私有静态数据成员只能在类内引用,公有或保护静态数据 成员可以在类外通过类名引用。(6)静态函数成员可以直接引用该类的静态成员,但不能直接 引用非静态数据成员;(7)公有静态函数成员可以通过类名或对象名来调用。5.1.2 静态成员静态成员第8页/共47页/EX5_2.cpp:演示使用静态成员#includeclass point private:int x,y;static int countP;
7、/声明私有静态数据成员 public:point(int xx=0,int yy=0)/定义构造函数 x=xx;y=yy;countP+;point(point&p);/声明拷贝构造函数 int get_x()return x;int get_y()return y;static void get_c()/定义公有静态函数成员 cout“Object id=”countPendl;/私有静态数据成;/员在类内引用第9页/共47页point:point(point&p)/定义拷贝构造函数 x=p.x;y=p.y;countP+;/私有静态数据成员在类内引用int point:countP=0;/
8、静态数据成员必须要在类外初始化void main()point:get_c();/第1次通过类名调用静态函数成员 point a(4,5);/声明类的对象a coutpoint a,a.get_x(),a.get_y();a.get_c();/第2次通过对象名调用静态函数成员 point b(a);coutpoint b,b.get_x(),b.get_y();point:get_c();/第3次通过类名调用静态函数成员第10页/共47页 在主函数中,分别采用类名和对象名来调用get_c()。第1次调用get_c()时由于还没有任何对象生成,只能采用类名的形式。由此可见,通过类名调用静态函数成
9、员可以输出静态数据成员的初始值。后面的2次get_c()的调用既可以采用类名的形式,也可以采用对象名的形式。程序运行结果为:Object id=0point a,4,5 Object id=1point b,4,5 Object id=2第11页/共47页/演示使用静态成员#include iostream.h#include string.hclass stu private:char*name,*num;static int total;public:stu(char*,char*);stu();void print();static int gettotal()return total;
10、第12页/共47页int stu:total=0;stu:stu(char*n1,char*n2)/*拷贝构造函数怎么设计?*/name=new charstrlen(n1)+1;num=new charstrlen(n2)+1;strcpy(name,n1);strcpy(num,n2);+total;void stu:print()coutn name:namen num:numn total:totalendl;第13页/共47页stu:stu()delete name;delete num;-total;int main(int argc,char*argv)stu a(wang,00
11、0001);stu b(yang,000002);stu c(tang,000003);a.print();coutendltotal:a.gettotal()endl;b.print();coutendltotal:stu:gettotal()endl;return 0;第14页/共47页 声明友元函数是为了使普通函数或其它类的成员函数能访问本类的成员,友元函数在类声明中由关键字friend修饰。普通函数声明为友元函数的形式:friend (参数表)其它类的成员函数声明为友元函数的形式:friend :(参数表)说明:(1)友元函数的声明可以在类声明中的任何位置,既可在public区,也可在
12、protected区,意义完全一样。(2)友元函数的定义一般放在类的外部,最好与类的其他成员函数定义放在一起。5.1.3 友元友元 1.友元函数友元函数第15页/共47页/EX5_3.cpp:演示使用普通函数作友元函数计算两点距离#include#include class point private:double x,y;public:point(double xx=0,double yy=0)x=xx;y=yy;double get_x()return x;double get_y()return y;friend double distance(point p1,point p2);/普
13、通函数作;/point的友元第16页/共47页double distance(point p1,point p2)/定义point类的友元函数 return(sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);void main()point myp1(1,1),myp2(4,5);/声明point类对象myp1和myp2 coutThe distance is:distance(myp1,myp2)endl;友元函数必须先接收对应类的对象,然后通过接收到的对象访问其所以成员第17页/共47页 如果友元是一个类,则称为友元类。友元类的声明形式
14、为:friend class 说明:(1)友元类的声明同样可以在类声明中的任何位置;(2)友元类的所有成员函数都成为友元函数。例如,若A类为B类的友元类,即在B类中声明:friend class A;则A类的所有成员函数都成为B类的友元函数,都可以访问B类的私有和保护成员。2.友元类友元类第18页/共47页 友元类的成员函数可以通过对象名直接访问到隐藏的数据,达到高效协调工作的目的。但在使用友元时还有两点需要注意:(1)友元关系不能传递。B类是A类的友元,C类是B类的友 元,C类和A类之间如果没有声明,就没有任何友元关系,不能进行数据共享。(2)友元关系是单向的。如果声明B类是A类的友元,B类
15、的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有和保护数据。第19页/共47页例:友元成员函数#include string.h#include iostream.hclass st_n;class scoprivate:int mat,eng;public:sco(int i1,int i2):mat(i1),eng(i2)void show()coutn math:mat;coutn eng:eng;void show(st_n&st);/st_n还没具体定义,/函数show()在后面实现;第20页/共47页class st_nprivate:char*nam
16、e,*num;public:friend void sco:show(st_n&);st_n(char*n1,char*n2)name=new charstrlen(n1)+1;num=new charstrlen(n2)+1;strcpy(name,n1);strcpy(num,n2);第21页/共47页void sco:show(st_n&st)coutn name:st.name;coutn num:st.num;show();int main(int argc,char*argv)st_n a(wang,123456);sco b(72,82);b.show(a);return 0;第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 结构 实用
限制150内