15.1青静态成员的重要性ch12-10.cpp:定义学号美和学生美#imclude -iostream:#i mcl ude -- cstring?usingnamespace stdint nextstudentid= :class studenticprivate:int value:全局变量nextStudentID即不能放在头文件中定义,也不能放在类StudentID中定义只能放在应用程序主函数main()的前面
• 全局变量nextStudentID即不能放在头文件中定 义,也不能放在类StudentID中定义。 • 只能放在应用程序主函数main( )的前面
15.1静态成员的重要性,若能将学生人数和链表首指针封装在类单面既可以受到类的保护,也可以作为一个类来重用。这是属于类的一部分,但并不适合用普通成员表示。也不适合用全局数据变量来表示·此时,可以用静态成员来表示
• 若能将学生人数和链表首指针封装在类里面, • 既可以受到类的保护,也可以作为一个类来 重用。 • 这是属于类的一部分,但并不适合用普通成 员表示。 • 也不适合用全局数据变量来表示。 • 此时,可以用静态成员来表示
15.2静态成员的使用类的成员有数据成员和成员函数之分。静态成员也有静态数据成员和静态成员函数之分。静态成员用static声明。类的构造函数和析构函数可以对静态数据成员进行操作,在应用程序中,也可以调用静态成员函数
• 类的成员有数据成员和成员函数之分。 • 静态成员也有静态数据成员和静态成员函数 之分。 • 静态成员用static声明。 • 类的构造函数和析构函数可以对静态数据成 员进行操作。 • 在应用程序中,也可以调用静态成员函数
15.2静态成员的使用ch15_1.cpp例如:类中定义静态数据成员和静态成员函数#include<iostream>#include<cstring>noofStudent既不是using namespace std;对象s1,也不是对象classStudent(s2的一部分。staticint noofStudentsychar name[40] ;public:Student(char * pName ="no name")(cout<<"createonestudentn"strncpy(name,pName,40)name[39]="[0′;1静态成员:创建对象伴随学生人数增1noofStudents++;cout<<noOfstudents<<endl;;1
例如:类中定义静态数据成员和静态成员函数 #include<iostream> #include<cstring> using namespace std; class Student { static int noOfStudents ; char name[40] ; public: Student(char * pName = "no name" ) { cout<<"create one student\n"; strncpy(name, pName,40); name[39]='\0’; noOfStudents++; //静态成员:创建对象伴随学生人数增1 cout<<noOfStudents<<endl;; } noOfStudent既不是 对象s1,也不是对象 s2的一部分
运行结果:~Student( )create one student11cout<<"destructonestudentln"create one student//析构对象伴随人数减1noOfStudents--2cout<<noOfStudents<<endl ;21destruct one studentstaticint number()//静态成员函数1destruct one studentreturn noOfStudents ;001:int Student :: noOfStudents = O;/静态数据成员初始化void fn( )no0fStudent既不是对象s1,{也不是对象s2的一部分。Student s1;Student s2;cout<<Student::number(<<endl;//调用静态成员函数用类名1void main( )[fn ();cout<<Student:number()<<endl;//调用静态成员函数用类名1
~Student( ) { cout<<"destruct one student\n“ ; noOfStudents-; //析构对象伴随人数减1 cout<<noOfStudents<<endl ; } static int number ( ) //静态成员函数 { return noOfStudents ; } } ; int Student :: noOfStudents = 0; //静态数据成员初始化 void fn( ) { Student s1 ; Student s2 ; cout<<Student::number()<<endl ; //调用静态成员函数用类名 } void main( ) { fn ( ); cout<<Student::number( )<<endl ; //调用静态成员函数用类名 } 运行结果: create one student 1 create one student 2 2 destruct one student 1 destruct one student 0 0 noOfStudent既不是对象s1, 也不是对象s2的一部分