第5章 类和对象2.docx
- 文档编号:5445186
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:17
- 大小:19.96KB
第5章 类和对象2.docx
《第5章 类和对象2.docx》由会员分享,可在线阅读,更多相关《第5章 类和对象2.docx(17页珍藏版)》请在冰豆网上搜索。
第5章类和对象2
5.5静态成员
局部变量:
一般来讲就是具有块作用域的变量。
如果把数据存储在局部变量中,函数在不同的块之间只能通过参数传递来共享数据。
优点:
在不同的函数体内互相不可见,很好地实现了函数之间的数据隐藏
缺点:
比较适合共享少量数据。
全局变量:
在整个程序中,除了在定义有同名局部变量之外,都可以进行直接访问。
优点:
实现了数据的共享
缺点:
无法对数据的访问权限进行有效的控制。
例5.13
#include
intglobal;
voidf(
{global=5;cout<
voidg(
{global=6;cout<
voidfun(
{intglobal=10;cout<
voidmain(
{f(;
g(;
fun(;
cout<
}
执行结果:
5
6
10
6
全局变量在整个程序中(除了在定义有同名局部变量之外都是可见的。
为了安全起见,不使用全局变量,而使用静态数据成员。
5.5.1静态数据成员
静态数据成员可以实现多个对象之间的数据共享,并且不会破坏安全性。
静态数据成员是属于所有对象的。
静态数据成员的使用方法:
1.静态数据成员在定义或说明时前面加static关键字。
例如:
classNclass
{……
private:
inta,b,c;
staticintn;
}
2.静态数据成员是静态存储的,必须进行初始化。
格式:
数据类型类名:
:
静态数据成员名=值;
例如:
classNclass
{……
private:
inta,b,c;
staticintn;
}
intNclass:
:
n=10;
3.静态数据成员不专属于任何一个对象,属于类。
如果访问权限允许的话(public),访问时可用:
类名:
:
静态数据成员名
例5.14
#include
classMyclass
{public:
Myclass(inta,intb,intc;
voidGetNumber(;
voidGetSum(;
private:
intA,B,C;
staticintSum;//静态数据成员说明
};
intMyclass:
:
Sum=0;//静态数据成员初始化
Myclass:
:
Myclass(inta,intb,intc
{数据成员2(参数,
}
……
{
cout<<”Number=”
TDate3:
:
TDate3(inty,intm,intd”
{”<”cout<<”:
Constructorcalled.\n”;}
可以:
TDate3:
:
TDate3(inty,intm,intd:
year(y,month(m,day(d
Sum={cout<<<”:
Constructorcalled.\n”
voidmain(
例
M.GetNumber(;
N.GetNumber(;
M.GetSum(;
N.GetSum(;
}
A(intx:
a(x{}
Number=3,7,
classB
Number=14
B(intx,inty:
aa(x,b(y{}
Sum=54
Sum=54”aa=
例5.15
#include
classCount
private:
public:
Count({};
voidmain(
voidShows
输出:
aa=3
private:
b=5
以上不能:
staticintsum;
{aa.a=x;b=y;}
intCount:
:
sum=100;
voidmain(
{Countc1;
c1.Showsum(;
5.3.3拷贝初始化构造函数
c4.Showsum(;
功能:
输出:
格式:
类名:
:
拷贝初始化构造函数名(const类名&引用名Showsum(
sum的。
要输出
只能通过某个对象来调用函数Showsum(
3.如果类中没有说明拷贝初始化构造函数,则系统自动生成一个缺省拷贝初始化构造函数。
例5.9
5.5.2
//tpoint1.h
为了解决这个问题,如果
TPoint(intx,inty{X=x;Y=y;}了
TPoint(TPoint&p;sum;编译错误。
因为对普通成员函数的调用必须通过对象名。
{cout<<采用静态成员函数来解决上述问题。
例
intXcoord({returnX;}
intYcoord({returnY;}public:
Count({intX,Y;
};
TPoint:
:
TPoint(TPoint&p
{X=p.X;
sum++;}
”Copy_initializationConstructorCalled.\n”;}
{cout<
”tpoint1.h”staticintsum;
};
intCount:
:
sum=100;
cout< {P2=”<”, c1.Showsum(; < 输出: Copy_initializationConstructorCalled. } 输出: 100 5.10拷贝初始化构造函数的其他用法。 ”tpoint1.h 1.TPointf(TPointQ; 关键字声明的成员函数。 2.同静态数据成员一样,静态成员函数属于整个类,为所有对象所共享。 P(0,0; 对于公有的静态成员函数,可以通过类名或对象名来调用;而一般的非静态成员函数只能通过对象名来调用。 P=f(N; cout<<”P=” 静态成员函数可以直接访问该类的静态数据和函数成员;而访问非静态数据成员,必须通过参数传递方式得到对象名,然后通过对象名来访问。 举例说明: 例5.17 {cout<<” staticvoidf1(Mm; intx,y; intA; staticintB; } 输出: Copy_initializationConstructorCalled. voidM: : f1(Mm Copy_initializationConstructorCalled. cout<<"B="< Ok Copy_initializationConstructorCalled. voidmain( 释放对象Q DestructorCalled.释放匿名对象 P=30,55 DestructorCalled. A=5 B=15DestructorCalled.释放对象P DestructorCalled.释放对象M 例5.18王婆卖西瓜。 每卖一个瓜,计算出该瓜的重量、总重量、总个数,还允许退瓜。 1.明确表示由一个对象初始化另一个对象。 classWatermelon {public: 2. P=f(N; 3.当对象作为函数返回值时。 系统用返回值初始化一个匿名对象时使用了拷贝初始化构造函。 returnR; total_number++;5.4成员函数的特性 ~Watermelon( 一般成员函数 } voiddisplay(; 特殊成员函数 private: floatweight; 5.4.1内联函数和外联函数 内联函数: 定义在类体内的成员函数。 外联函数: 说明在类体内,定义在类体外的成员函数。 intWatermelon: : total_number=0; voidWatermelon: : display( 例5.11 classA {public:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 类和对象2 对象