第15章静态成员函数与友元
第15章 静态成员函数与友元
目录静态成员的重要性15.1静态成员的使用15.2静态数据成员15.3静态成员函数15.415.5需要友元的原因友元的使用15.6
15.1 静态成员的重要性 15.2 静态成员的使用 15.3 静态数据成员 15.4 静态成员函数 15.5 需要友元的原因 15.6 友元的使用
15静态成员函数和友元类是类型而不是数据对象每个类的对象都是该类数据成员的拷贝然而,往往需要让类的所有对象在类的范围内共享某个数据。,声明为static的类成员便能在类范围中共享,称之为静态成员。友元函数完全是普通的C++函数,不同的是,它可以访问类的保护或私有成员,方便编程,提高了效率,但却破坏了类的封装
• 类是类型而不是数据对象。 • 每个类的对象都是该类数据成员的拷贝。 • 然而,往往需要让类的所有对象在类的范围内共 享某个数据。 • 声明为static的类成员便能在类范围中共享,称 之为静态成员。 • 友元函数完全是普通的C++函数。 • 不同的是,它可以访问类的保护或私有成员,方 便编程,提高了效率,但却破坏了类的封装
15.1静态成员的重要性要想得到现有的学生数,不能到类Student中去取。因为类不是一个占有内存的实体那么,到哪个对象中去取学生数?一且学生人数变化,需要每个对象都去修改吗?如果放到全局变量中,那么在类外面,不安全,也影响了封装性
• 要想得到现有的学生数,不能到类Student中 去取。 • 因为类不是一个占有内存的实体。 • 那么,到哪个对象中去取学生数? • 一旦学生人数变化,需要每个对象都去修改 吗? • 如果放到全局变量中,那么在类外面,不安 全,也影响了封装性
15.1静态成员的重要性例如:用全局变量来表示学生类链首指针和学生数classStudent(S链表首指针Student * pFirst ;int//学生人数count ;voidfn(){/创建第1个学生对象Student ss;/学生人数增1count++ ;//没有对pFirst约束,随便乱用,一点也不把它当链首指针pFirst = &ss;l//fn()退出时,ss作用域终止,ss被析构,可学生人数忘了减1
例如:用全局变量来表示学生类链首指针和学生数 class Student { //. } ; Student * pFirst ; //链表首指针 int count ; //学生人数 void fn( ) { Student ss ; //创建第1个学生对象 count++ ; //学生人数增1 //没有对pFirst约束,随便乱用,一点也不把它当链首指针 pFirst = &ss ; } //fn()退出时,ss作用域终止,ss被析构,可学生人数忘了减1