第11讲静态成员和友元 教学目的与要求 了解友元的声明和使用。 掌握静态成员的特点和使用。 教学内容提要: 静态成员; 2、友元; 3、常对象、常数据成员和常成员函数 教学重点:静态成员的特点和使用。 教学难点:静态成员的特点和使用。 教学进度:P85~P96 教学过程:
第11讲 静态成员和友元 •教学目的与要求: 了解友元的声明和使用。 掌握静态成员的特点和使用。 •教学内容提要: 1、静态成员; 2、友元; 3、常对象、常数据成员和常成员函数 •教学重点:静态成员的特点和使用。 •教学难点:静态成员的特点和使用。 •教学进度:P85~P96 •教学过程:
1静态成员】 静态成员是满足在某些情况下数据共享的需求 静态数据成员 静态成员的分类{ 静态成员函数 (111静态数据成员 静态数据成员是同一个类中所有对象共享的成员,而不是某一对象的成 员。一个类的静态数据成员只存储在一处,供该类所有对象共享访问 如果需要把某一数据成员声明为静态成员,只需在其前面加关键字 static 由于静态数据成员是静态存储的,它具有静态生存期。 注由于在声明类时说明的静态数据成员只是一种引用性声明,而且在声 明对象时,由于静态数据成员的特殊性,并不会为之分配内存。要求单独 对静态数据成员进行定义性声明,以获得相应的存储空间
静态成员是满足在某些情况下数据共享的需求。 静态数据成员是同一个类中所有对象共享的成员,而不是某一对象的成 员。一个类的静态数据成员只存储在一处,供该类所有对象共享访问。 静态成员的分类 静态数据成员 静态成员函数 【 11.1.1 静态数据成员】 如果需要把某一数据成员声明为静态成员,只需在其前面加关键字static。 由于静态数据成员是静态存储的,它具有静态生存期。 注 由于在声明类时说明的静态数据成员只是一种引用性声明,而且在声 明对象时,由于静态数据成员的特殊性,并不会为之分配内存。要求单独 对静态数据成员进行定义性声明,以获得相应的存储空间。 【 11.1 静态成员】
(必须在具有文件作用域的某个地方进行 其形式如下:类型类名::静态数据成员名=初始化值; 注在定义静态数据成员时,由于关键字st是数据类型的一部 分,不能加。 例11静态数据成员的使用 include iostream. h class A public: A(int x, int y) a=x? AOf void getXYo
必须在具有文件作用域的某个地方进行。 其形式如下: 类型 类名::静态数据成员名=初始化值; 注 在定义静态数据成员时,由于关键字static不是数据类型的一部 分,不能加。 静态数据成员的使用 #include″iostream.h″ class A { public: A(int x,int y) { a=x; b=y; } ~A(){ } void getXY() 例 11-1
(续) cout<<"X="<<a<<'t<<"Y="<<b<<endl; 3 void getsUMO Y=2 summum+a+b cout<< SUM=<<sum<<endl S SUM=3 X=3 Y=4 private: SUME10 int a b static int sum; sum10 intA:sum=0;/静态数据成员的定义 void maino Aal(1,2); a 2 a al. getxY0; al. getsUMo; b 4 Aa2(3,4); a2. getXYo a2. getsUMO;
{ cout<< ″X= ″<<a<< ′\t ′<< ″Y= ″<<b<<endl; } void getSUM() { sum=sum+a+b; cout<< ″SUM= ″<<sum<<endl; } private: int a,b; static int sum; }; int A::sum=0; //静态数据成员的定义 void main() { A a1(1,2); a1.getXY(); a1.getSUM(); A a2(3,4); a2.getXY(); a2.getSUM(); } X=1 Y=2 SUM=3 X=3 Y=4 SUM=10 (续) a1 a b 1 2 a2 a b 3 4 sum 0310
在声明类时,让静态数据成员公有,则程序中可以不通过该类的对象直接 访问该数据。对它的访问可以直接通过类名实现 形式如下 类名::静态数据成员名 例如:# include- iostream. h> class a{ public: static int x, int A: X=0; void maino cout<<A: x<<endl A:x=10 cout<<A: x<<endl 对于把类的静态数据成员声明为私有的情形,如果希望不使用该类的对象 来访问该数据,就必须据访问该数据的公有辅助成员函数声明为静态的, 也即必须提供访问它的公有静态成员函数
例如: #include<iostream.h>class A{public: static int x; }; int A::x=0; void main() { cout<<A::x<<endl; A::x=10; cout<<A::x<<endl; } 在声明类时,让静态数据成员公有,则程序中可以不通过该类的对象直接 访问该数据。对它的访问可以直接通过类名实现。 对于把类的静态数据成员声明为私有的情形,如果希望不使用该类的对象 来访问该数据,就必须据访问该数据的公有辅助成员函数声明为静态的, 也即必须提供访问它的公有静态成员函数。 形式如下: 类名::静态数据成员名