个人备案的网站做企业内容,wordpress後台小程序,百度搜索工具,百度推广联盟文章目录 一、单例模式#xff08;一#xff09;概念#xff08;二#xff09;实现方式1. 饿汉式2. 懒汉式 二、友元#xff08;一#xff09;概念#xff08;二#xff09;友元函数1.概念2.语法格式3. 使用示例访问静态成员变量访问非静态成员变量 #xff08;三一概念二实现方式1. 饿汉式2. 懒汉式 二、友元一概念二友元函数1.概念2.语法格式3. 使用示例访问静态成员变量访问非静态成员变量 三友元成员函数四友元类 一、单例模式
一概念
设计模式只是一种编程思想没有固定的代码。 是面临一般问题的解决的方法。 如单例模式、工厂模式、桥接模式…
单例指的是只有一个实例化对象
二实现方式
1. 饿汉式
饿汉式是加载时完成创建无论用或者不用单例对象一直存在 步骤 构造函数私有化 使用私有的静态成员变量维护唯一的单例对象 定义公有的静态成员函数用于获取单例对象
#include iostream
using namespace std;
class MyClass
{
public://定义公有的静态成员函数用于获取单例对象static MyClass getObj(){return m1;}void print(){coutm_am_aendl;}
private://构造函数私有化MyClass(int a):m_a(a){cout私有化构造函数endl;}//使用私有的静态成员变量维护唯一的单例对象static MyClass m1;int m_a;
};
//静态成员变量的定义
MyClass MyClass::m1100;int main()
{MyClass mMyClass::getObj();MyClass mmMyClass::getObj();coutm mendl;coutmmmmendl;m.print();mm.print();return 0;
}输出结果
2. 懒汉式
懒汉式是用时即创建不用即销毁 步骤 构造函数私有化 使用私有的静态成员指针变量维护唯一的单例对象 定义公有的静态成员函数用于获取单例对象每次调用该函数都返回唯一的指针
#include iostream
using namespace std;
class MyClass
{
public://定义公有的静态成员函数用于获取单例对象static MyClass* getObj(){if(NULL m1){m1new MyClass(100);}return m1;}void print(){coutm_am_aendl;}
private://构造函数私有化MyClass(int a):m_a(a){cout私有化构造函数endl;}//使用私有的静态成员指针变量维护唯一的单例对象static MyClass *m1;int m_a;
};
//静态成员变量的定义
MyClass* MyClass::m1NULL;int main()
{MyClass *mMyClass::getObj();MyClass *mmMyClass::getObj();coutm mendl;coutmmmmendl;m-print();mm-print();return 0;
}输出结果
二、友元
一概念
友元是C中一种特殊的机制
二友元函数
1.概念
将一个全局函数作为一个类的友元函数在类中将此函数用friend修饰就是友元函数
友元函数打破类的封装性友元可以访问类中的任何权限的成员
2.语法格式
class 类名{
访问控制权限friend 返回值 函数名(形参名){}
}注意友元函数是不受访问控制权限的限制可以放在类中任意位置但使用时一般放在开头。
3. 使用示例
访问静态成员变量
#include iostream
using namespace std;
class MyClass
{friend void print();
public:static int s_pub;
private:static int s_pri;
protected:static int s_pro;
};//静态成员变量定义
int MyClass::s_pub100;
int MyClass::s_pri200;
int MyClass::s_pro300;//全局函数
void print(){couts_pubMyClass::s_pub ;couts_priMyClass::s_pri ;couts_proMyClass::s_proendl;
}int main()
{print();return 0;
}访问非静态成员变量
#include iostream
using namespace std;
class MyClass
{friend void print(MyClass c);
public:int m_pub;
private:int m_pri;
protected:int m_pro;
};void print(MyClass c){c.m_pub10;c.m_pri20;c.m_pro30;coutm_pubc.m_pub ;coutm_pric.m_pri ;coutm_proc.m_proendl;
}int main()
{MyClass m;print(m);return 0;
}三友元成员函数
将一个类的成员函数作为另一个类的友元函数
四友元类
假设有两个类类A 类B 类B作为类A的友元类说明类B可以访问类A的公有权限
注友元关系不具有交换性A是B的朋友B不一定是A的朋友友元关系不具有传递性友元关系不能被继承友元关系破坏了类的封装性使访问控制权限失去了意义因此实际开发时不要过于依赖友元