C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 类的静态成员 包含内嵌对象的派生类构造 常对象和常成员 类的组合 赋值运算符重载 友元 运算符重载 包含内嵌对象的派生类构造 包含内嵌对象的派生类析构 赋值运算符重载 C++语言程序设计
基本知识 a C++语言程序设计
9.1 类的静态成员 类的静态成员 用来解决同一个类的不同对象之间数据和函数的共享问题 包括: C++语言程序设计 类的静态数据成员 类的静态成员函数 C++语言程序设计
9.1 类的静态成员 例如: 抽象出所有学生的共性,设计学生类 如果需要统计学生人数,该数据存放何处? C++语言程序设计 类外的变量存储人数? 不能实现信息隐藏 用类的数据成员存储人数? 每个对象都存储一个副本 冗余 容易产生数据不一致问题 理想方案:类的所有对象共同拥有一个用于存放 人数的数据成员 class Student { public: Student(int, char *, int, ); ~Student(); void printstu(); private: int id; string name; int age; float score; }; C++语言程序设计
9.1 类的静态成员 静态数据成员 是由该类的所有对象共同维护和使用 它是类的数据成员的一种特例,采用static关键字来声明,每个类只有一个副本,用来实现了同一类的不同对象之间的数据共享 它具有静态生存期,可以由类的任何一个对象来访问 静态数据成员是属于类的,可以通过类名对它进行访问 语法格式:类名::标识符 类的声明中只能声明静态数据成员的存在,静态数据成员的初始化需要在类的外部进行 C++语言程序设计
例:定义学生类,定义一个静态数据成员count,用来统计学生的人数 9.1 类的静态成员 例:定义学生类,定义一个静态数据成员count,用来统计学生的人数 //静态数据成员的定义和使用 #include <iostream> #include <string> using namespace std; class Student { public: Student(char* pName ="no name"); ~Student(); void PrintC private: static int count; //若写成count=0则非法 string name; }; C++语言程序设计
9.1 类的静态成员 C++语言程序设计 Student::Student(char* pName)// ="no name") { cout <<"create one student\n"; name=pName; count++; //静态成员,每创建一个对象,学生人数增1 } Student::~Student() cout <<"destruct one student\n"; count--; //每析构一个对象,学生人数减1 cout<<"The number of students is "<<count<<endl; void Student::PrintC(){ 静态数据成员count的初始化在类外进行,利用类名来引用、不用再写static int Student::count =0; void main() { Student s1; s1.PrintC(); Student s2; s2.PrintC(); } C++语言程序设计
9.1 类的静态成员 静态成员函数 是使用static关键字声明的函数成员 静态成员函数也属于整个类,由一个类的所有对象共享 对于公有静态成员函数,可以通过“类名::静态成员函数名”来调用 在创建任何对象前,这类函数就可以被调用 也可以通过对象来调用 C++语言程序设计
前例修改:在创建任何对象前,输出count的初始值 9.1 类的静态成员 前例修改:在创建任何对象前,输出count的初始值 class Student { public: Student(char* pName ="no name"); ~Student(); //PrintC()函数定义为静态成员函数: static void PrintC(){ cout<<"The number of students is “ <<count<<endl; } private: static int count; //若写成count=0则非法 string name; }; int Student::count =0; void main() { //通过类名调用静态成员函数 Student::PrintC(); Student s1; s1.PrintC(); Student s2; s2.PrintC(); } C++语言程序设计