当前位置: 首页 > news >正文

网站建设对企业发展的意义网站建设帮助中心

网站建设对企业发展的意义,网站建设帮助中心,难道做网站必须用vue框架吗,怎么做朋友圈推广链接特殊类设计 1.设计类:不能被拷贝2.设计类:不能被继承3.设计类:只能在堆上创建对象4.设计类:只能在栈上创建对象5.设计类:只能创建一个对象(单例模式) 本节重点: 掌握特殊类的设计方…

特殊类设计

  • 1.设计类:不能被拷贝
  • 2.设计类:不能被继承
  • 3.设计类:只能在堆上创建对象
  • 4.设计类:只能在栈上创建对象
  • 5.设计类:只能创建一个对象(单例模式)

本节重点:

  • 掌握特殊类的设计方式

1.设计类:不能被拷贝

// C++98私有化
class Copy
{
private:Copy(const Copy&);Copy& operator=(const Copy&);
};
// C++11关键字delete
class Copy
{
public:Copy(const Copy&) = delete;Copy& operator=(const Copy&) = delete;
};

2.设计类:不能被继承

// C++98中构造函数私有化, 派生类无法调用基类的构造函数, 无法继承
class NoInherit
{
public:static NoInherit GetInstance(){return NoInherit();}private:NoInherit(){}
};
// C++11关键字fianl
class NoInherit final
{// ...
};

3.设计类:只能在堆上创建对象

class HeapOnly
{
public:static HeapOnly* CreateObj(){return new HeapOnly();}// 禁用: 拷贝构造和拷贝赋值HeapOnly(const HeapOnly&) = delete;HeapOnly& operator=(const HeapOnly&) = delete;private:// 默认构造私有化HeapOnly(){}
};int main()
{// HeapOnly obj1;// static HeapOnly obj2;// HeapOnly *obj3 = new HeapOnly();HeapOnly* obj4 = HeapOnly::CreateObj();// HeapOnly obj5(*obj4);// HeapOnly obj6 = *obj4;delete obj4;return 0;
}
class HeapOnly
{
public:void Delete(){delete this;}
private:// 析构函数私有化~HeapOnly(){}
};int main()
{// 程序结束调用析构函数, 由于私有化, 无法创建对象 // HeapOnly obj1;// static HeapOnly obj2;// 可以在堆上创建对象, 但是调用delete存在问题(delete: 先调用析构函数, 再释放空间)// HeapOnly* obj3 = new HeapOnly();// delete obj3;HeapOnly *obj4 = new HeapOnly();obj4->Delete();return 0;
}

4.设计类:只能在栈上创建对象

class StackOnly
{
public:static StackOnly CreateObj(){return StackOnly();}void* operator new(size_t) = delete;void operator delete(void*) = delete;private:StackOnly(){}
};int main()
{// StackOnly obj1;// static StackOnly obj2;// StackOnly* obj3 = new StackOnly();// 传值返回需要拷贝构造StackOnly obj4 = StackOnly::CreateObj();StackOnly obj5(obj4);StackOnly obj6 = obj4;// 但是用拷贝构造创建堆区对象: 于是可以禁用new// StackOnly* obj7 = new StackOnly(obj4);// 问题: 静态区创建对象static StackOnly obj8(obj4);return 0;
}
class StackOnly
{
public:static StackOnly CreateObj(){return StackOnly();}// 禁用拷贝构造, 打开移动构造StackOnly(StackOnly&&){}StackOnly(const StackOnly&) = delete;private:StackOnly(){}
};int main()
{// StackOnly obj1;// static StackOnly obj2;// StackOnly* obj3 = new StackOnly();// 此时采用: 移动构造StackOnly obj4 = StackOnly::CreateObj();// StackOnly obj5(obj4);// StackOnly obj6 = obj4;// StackOnly* obj7 = new StackOnly(obj4);// static StackOnly obj8(obj4);// 问题: 移动构造创建对象static StackOnly obj8(move(obj4));StackOnly* obj9 = new StackOnly(move(obj4));return 0;
}

5.设计类:只能创建一个对象(单例模式)

  • 设计模式:反复使用,多数人知晓、经过分类的、代码设计经验的总结。
  • 单例模式:一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。
  • 迭代器模式、适配器模式、单例模式、策略模式、观察者模式、工厂模式、装饰器模式等…

单例模式有两种实现模式:饿汉模式和懒汉模式

// 饿汉模式存在问题
// 1. 多个饿汉模式的单例,某个对象初始化内容较多(读文件),会导致程序启动慢
// 2. A和B两个饿汉,对象初始化存在依赖关系,要求A先初始化,B再初始化,无法保证
class InfoMar
{
public:static InfoMar& GetInstance(){return _ins;}private:InfoMar(){cout << "ip:" << _ip << endl;cout << "port: " << _port << endl;}// 禁用: 拷贝构造和拷贝赋值InfoMar(const InfoMar&) = delete;InfoMar& operator=(const InfoMar&) = delete;private:string _ip = "127.0.0.1";int _port = 8080;// 静态对象与普通对象不同: 不在类中, 而是在静态区, 类域的限制static InfoMar _ins;
};// 静态成员: 类内声明, 类外定义
InfoMar InfoMar::_ins;int main()
{// 程序运行在该行: 静态对象就被创建好了InfoMar::GetInstance();return 0;
}
// 懒汉模式: 解决饿汉模式的两个问题
class InfoMar
{
public:static InfoMar& GetInstance(){// 第一次调用时创建单例对象// 存在线程安全问题if (_pins == nullptr){_pins = new InfoMar;}return *_pins;}static void DelInstance(){delete _pins;_pins = nullptr;}private:InfoMar(){cout << "ip:" << _ip << endl;cout << "port: " << _port << endl;}// 禁用: 拷贝构造和拷贝赋值InfoMar(const InfoMar&) = delete;InfoMar& operator=(const InfoMar&) = delete;private:string _ip = "127.0.0.1";int _port = 8080;static InfoMar* _pins;
};InfoMar* InfoMar::_pins = nullptr;int main()
{InfoMar::GetInstance();return 0;
}// 懒汉模式2: 推荐
class InfoMar
{
public:static InfoMar& GetInstance(){// 局部静态: 再第一次调用时创建单例对象// C++11之后static InfoMar ins;return ins;}private:InfoMar(){cout << "ip:" << _ip << endl;cout << "port: " << _port << endl;}// 禁用: 拷贝构造和拷贝赋值InfoMar(const InfoMar&) = delete;InfoMar& operator=(const InfoMar&) = delete;private:string _ip = "127.0.0.1";int _port = 8080;
};int main()
{InfoMar::GetInstance();return 0;
}
http://www.dtcms.com/a/560453.html

相关文章:

  • 手机搭建本地网站metro 导航网站
  • 重庆建网站cqiezscom淘宝wordpress cms主题
  • 网站建设和考核工作通知百度运营培训班
  • 东海县建网站字节跳动直播开放平台
  • 镇海网站建设常平网站公司
  • 做网站的空间费用要多少WordPress设置腾讯企业邮箱
  • 宣传海报怎么制作河南网站关键词优化代理
  • 郑州网站制作公司名单怎么制作公众号教程
  • 商城手机网站开发本地集团网站建设
  • 网站备案ip地址上海医疗网站备案
  • 专业的led网站建设广西南宁官方网站企业
  • 网站没有备案怎么做支付网站如何做IPV6支持
  • 想开发一个旧物交易网站应该怎么做沈阳设计网站
  • 千图素材网站5 个不同类型的网站
  • 做外贸网站义乌在线手机动画网站模板
  • 网站文章关键字密度新加坡服务器网站需要备案么
  • 怎么查网站icp备案个体户可以做开发网站业务嘛
  • 做百度推广网站得多少钱聊城集团网站建设费用
  • 欧美平面设计网站网站建设宣传素材
  • 选择合肥网站建设wordpress小程序百家号
  • 南京网站搭建公司微信网站如何制作软件
  • 河南网站建设服务公司seowhy问答
  • 电商网站建设如何23456网址大全
  • 科技馆优化是企业通过网站来做吗
  • 成都彩票网站开发怎么在百度打广告
  • 孝感做网站的公司四秒网站建设
  • 个人怎样做网站建筑工找活哪个平台好
  • 可以做样机图的网站泉州建设部网站
  • 电商网站前后台模板常州本地做网站的大公司
  • 做网站是不是涉及很多语言职建设工程和工程建设