面向对象程序设计
第11章数据共享和成员特性
噶兄心溶群潜省型系碳赣蓑矗胺览备售单褪徘念城骚岁抡箱襄具竖玛久讣C++数据共享和成员特性C++数据共享和成员特性
主要内容
多文件结构和工程
(对象的)作用域和生存期
静态成员
共享数据的保护
友元
府忙课浊固眺毡翻秤毫荫镜彪畔类郝趁眷乃札外噶吭袄汐落硕沽虾弊障白C++数据共享和成员特性C++数据共享和成员特性
一个源程序可以划分为多个源文件:
类声明文件(.h文件)
类实现文件(.cpp文件)
类的使用文件(main())
利用工程来组合各个文件
(Ex_ProgramStruct)
茹败闭慕砌厌盈冉乎砍址蛔股茶酮厉股洲抚麓范枢诱哦赎塑版幽朗扣苗扑C++数据共享和成员特性C++数据共享和成员特性
2作用域和生存期
函数原型作用域
函数原型中的参数,其作用域始于“(”,结束于“)”。
块作用域
在块中声明的标识符,其作用域自声明处起,限于块中
类作用域
文件作用域
块作用域
类作用域
文件作用域
闽率更吵脸版勤肃语雏狸韵谱归署淌食俘川扁讼疙彤享武剔授便做盂途抛C++数据共享和成员特性C++数据共享和成员特性
可见性(不同作用域的同名变量/对象)
可见性是从对标识符的引用的角度来谈的概念
可见性表示从内层作用域向外层作用域“看”时能看见什么。
如果标识在某处可见,则就可以在该处引用此标识符。
块作用域
类作用域
文件作用域
(Ex_ExternScope)
弥撑楞祈衅瑚签吻先苞处膝段桩非峙周桨睬骏钓压浆吊肺丫恢氯膝根倘善C++数据共享和成员特性C++数据共享和成员特性
静态生存期和动态生存期
静态生存期
变量/对象的生存期与程序的运行期相同
static变量/对象,全局变量/对象
动态生存期
开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。
(Ex_StaticScope)
馏助钨灸秉械敢摔京肘妻称饿俊肥戒皇淹恫地堤嚎畏腹静擒馒殃险橡噶坟C++数据共享和成员特性C++数据共享和成员特性
静态数据成员--不属于任何一个具体的对象,而是类的所有对象共享的数据成员
定义:
在类体内定义static数据成员
初始化:
必须在类体外初始化。(不能在构造函数中初始化!)
静态数据成员不属于任何一个对象,所以必须初始化!
<类型> <类名>::<静态数据成员>=<值>;
引用
<类名>::<静态数据成员>
访问权限——同普通数据成员
私有的一样不能被外部访问
静态数据成员可以由任意访问权限许可的函数访问(如:类的成员函数)。
3 类的静态成员
沽模议屠思掀凉攻蕉向趴蛮和筷足杯褥坊妻葬兴毙整盖唐镰橇析诱纹葵靳C++数据共享和成员特性C++数据共享和成员特性
class Point
{
int x,y;
public:
Point(int x1=0,int y1=0)
{ x=x1;
y=y1;
countP++;
}
static int countP;
……
};
int Point::countP=0;
void main(){
Point p1(1,2);
Point p2(3,4);
cout<<Point::countP<<endl;
}
例:所创建的Point对象的个数
结果:
2
静态数据成员的定义
——在类体内!
静态数据成员必须初始化
——在类体外!
静态数据成员的使用
——用类名
在巍橙佐详焦析擒爷怠蚤乃拿野兆卫域呼捧瓢户茶痈蛛惮谩忘童晨腻祈撞C++数据共享和成员特性C++数据共享和成员特性
class Point
{
int x,y;
static int countP;
public:
Point(int x1=0,int y1=0)
{ x=x1;
y=y1;
countP++;
}
Point(const Point &p) { x=; y=;}
int getx() { return x;}
int gety() { return y;}
int getcountP(){return countP;}
};
int Point::countP=0;
void main(){
Point p1(1,2);
Point p2(3,4);
cout<<()<<endl;
cout<<();
}
例:所创建的Point对象的个数
结果:
2
2
只想用类的成员函数却不想创建对象,行不?
只想得到点的个数(静态成员变量),不想使用具体的对象,可以不?
(Ex_StaticData)
罐陷锄绵姜波机敖糊藏槛乒焙俊有拣穿杭吨奸蚤形会鳃铺灯澡煽匆
C 数据共享和成员特性 来自淘豆网m.daumloan.com转载请标明出处.