友元类
友元类 , 友元类中所有的成员函数都是该类的友元函数 , 可以访问该类对象的私有成员变量 ;
友元类声明 , 声明友元类方法 friend class 友元类名称; , 友元类中所有的成员函数都是该类的友元函数 ;
Student.h 中友元类声明
//声明友元类 , 可以在友元类中访问修改类中的私有成员变量 //友元类中的所有的成员函数都是友元函数 friend class Teacher;
友元类定义与实现 , 友元类中定义的方法都是 Student 类的友元函数 , 其中需要传入 Student* 参数来访问 Student 对象的私有成员变量 ; 可以在定义的时候 , 直接将该方法实现 ;
//Student 中的友元类 , 该友元类中的所有函数都是 Student 对象的友元函数 class Teacher { public: //友元类中声明方法 , 修改 Student 中的 id 编号 void setId(Student* student, int id) { student->id = id; }
单例类
单例类三要素
① 私有静态单例类类型的静态成员变量 ;
② 私有构造函数 ;
③ 静态共有方法 , 该方法中调用私有构造方法创建唯一一个单例类对象 ;
单例类声明 , 创建 Instance 单例类 ;
① 声明一个私有的静态成员变量 , 外部不能直接访问该成员变量 ; private : static Instance* instance; ;
② 声明私有构造函数 , 外部不能直接调用构造方法创建该类对象 ; private : Instance(); ;
③ 声明静态共有的方法 , 在该方法中调用私有构造函数创建单例对象 , public : static Instance* getInstance(); , 注意创建的这个单例对象是唯一的 , 只能创建一个 ;
Instance.h 单例类声明
#pragma once class Instance { //声明一个私有的静态成员变量 , 及构造方法 //外部不能直接调用构造方法创建该类对象 private : static Instance* instance; Instance(); //声明共有静态方法 //该方法中可调用私有构造方法并返回 Instance 对象 public : static Instance* getInstance(); public : int number = 888;
单例类实现 , 在实现中 , 首先给 Instance::instance 静态成员变量赋值初始值 0 , 静态成员变量可以使用 类名::静态成员变量名 访问 ; 然后实现私有的构造函数 , 最后实现共有的单例类获取函数 , 在该函数中首先判定单例类对象是否已经创建 , 如果已经创建 , 直接返回该单例类对象 , 如果没有创建那么先创建该单例类对象 , 再返回该单例对象 instance ;
//设置Instance 静态成员变量 初始值值 //静态成员变量可以使用 类名::静态成员变量名 访问 Instance* Instance::instance = 0; //实现构造函数 Instance::Instance() { } //实现 getInstance 静态成员函数 //方法的实现中 , 可以使用 this-> 调用成员变量或成员方法 //静态的成员变量和成员函数可以直接调用 Instance* Instance::getInstance() { if (!instance) { instance = new Instance(); } return instance;
单例类使用 , 首先在 CMakeList.txt 中配置上面的 Instance.h 和 Instance.cpp 两个文件 , 然后在 main() 函数所在文件 , 包含 Instance.h 头文件 , 即可在 main() 中使用该单例类了 ; 调用 Instance::getInstance(); 可创建单例类 , 注意单例类使用完毕后要释放该类 , 否则会造成内存泄漏 ;
//创建单例对象 Instance* instance = Instance::getInstance(); //打印单例对象中的变量值 cout << "单例 instance->number : " << instance->number << endl; //释放单例类 delete instance;
代码执行结果 :
单例 instance->number : 888