第4章类的高级部分 陈哲副教授 南京航空航天大学计算机科学与技术学院
1 第 4 章 类的高级部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院
主要内容 4.1静态成员 42友元 4.3对象赋值问题 44拷贝构造函数 4.5运算符重载 46对象组合
2 主要内容 4.1 静态成员 4.2 友元 4.3 对象赋值问题 4.4 拷贝构造函数 4.5 运算符重载 4.6 对象组合
41静态成员 例:一个学生类,定义其对象张三、李四,他 们分别维护着类成员的一份副本(学号、姓名、 籍贯等) 如果要统计一个班学生总数? 用类外的变量记录,违背了数据封装。 用类的一个数据成员记录,导致多个副本 不仅冗余,而且势必造成数据不一致
3 4.1 静态成员 • 例:一个学生类,定义其对象张三、李四,他 们分别维护着类成员的一份副本(学号、姓名、 籍贯等)。 • 如果要统计一个班学生总数? – 用类外的变量记录,违背了数据封装。 – 用类的一个数据成员记录,导致多个副本, 不仅冗余,而且势必造成数据不一致
41.1静态数据成员 1.用关键字 static F明; 2.同一个类中的所有对象都共享该变量; 3.必须在类外定义和初始化,用(:)来指明所属的类 4.静态变量不依赖于对象而存在,无论是否定义该类的 对象,这种类型的变量都存在。静态数据成员实际 上是在类外定义的一个变量,它的生存期和整个程 序的生存期一样,在定义对象之前,静态数据成员 就已经存在
4 4.1.1 静态数据成员 1. 用关键字static声明; 2. 同一个类中的所有对象都共享该变量; 3. 必须在类外定义和初始化,用(::)来指明所属的类。 4. 静态变量不依赖于对象而存在,无论是否定义该类的 对象,这种类型的变量都存在。静态数据成员实际 上是在类外定义的一个变量,它的生存期和整个程 序的生存期一样,在定义对象之前,静态数据成员 就已经存在
class Static Demo i static int x i int y public: void putx( int a)t void put int b y=b; int getxoi return X int gety (i return y 000 int StaticDemo::x
5 class StaticDemo { static int x ; int y ; public: void putx( int a){ x=a ; } void puty( int b ){ y=b ; } int getx( ) { return x ; } int gety( ) { return y ; } } ; int StaticDemo::x ;