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

创意广告设计网站网站开发.net

创意广告设计网站,网站开发.net,微信手机网站建设,如何在百度推广自己#x1f4dd;个人主页#x1f339;#xff1a;Eternity._ ⏩收录专栏⏪#xff1a;C “ 登神长阶 ” #x1f921;往期回顾#x1f921;#xff1a;C 类型转换 #x1f339;#x1f339;期待您的关注 #x1f339;#x1f339; ❀C特殊类 #x1f4d2;1. 不能被拷贝… 个人主页Eternity._ ⏩收录专栏⏪C “ 登神长阶 ” 往期回顾C 类型转换 期待您的关注 ❀C特殊类 1. 不能被拷贝的类2. 只能在堆上创建对象3. 只能在栈上创建对象4. 不能被继承的类5. 只能创建一个对象(单例模式)设计模式⭐单例模式 6. 总结 前言在C这片浩瀚的编程海洋中基础语法与常用库如同岛屿与浅滩引领着每一位初学者逐步前行。然而当我们的航程逐渐深入便会发现那些隐藏于波涛之下的特殊类它们如同深海中的宝藏等待着勇敢的探索者去发掘 特殊类作为C语言中的高级特性之一不仅承载着对面向对象编程思想的深刻体现更是解决复杂问题、优化程序性能的利器。它们包括但不限于模板类、智能指针、迭代器、多态基类抽象类、以及那些利用高级特性如RAII、类型萃取等设计的独特类。这些特殊类以其独特的设计理念和强大的功能在C的各个领域发挥着不可替代的作用 现在我将带领大家一同踏上这场探索之旅通过详细解析C中的特殊类揭示它们的设计原理、应用场景以及使用技巧。我们将从基础概念出发逐步深入到高级特性通过实例演示和代码分析帮助读者逐步掌握这些特殊类的精髓 让我们一同揭开C特殊类的神秘面纱领略其独特的魅力与力量吧 1. 不能被拷贝的类 拷贝只会放生在两个场景中拷贝构造函数以及赋值运算符重载 实现方式 因此想要让一个类禁止拷贝只需让该类不能调用拷贝构造函数以及赋值运算符重载即可 C98将拷贝构造函数与赋值运算符重载只声明不定义并且将其访问权限设置为私有即可 原因 设置成私有如果只声明没有设置成private用户自己如果在类外定义了就可以不 能禁止拷贝了只声明不定义不定义是因为该函数根本不会调用定义了其实也没有什么意义不写 反而还简单而且如果定义了就不会防止成员函数内部拷贝了 C11C11扩展delete的用法delete除了释放new申请的资源外如果在默认成员函数后跟上delete表示让编译器删除掉该默认成员函数 代码示例 (C) //不能被拷贝的类 //C98 class CopyBan {// ... private:CopyBan(const CopyBan);CopyBan operator(const CopyBan);//... };//C11 class CopyBan {// ...CopyBan(const CopyBan) delete;CopyBan operator(const CopyBan) delete;//... };2. 只能在堆上创建对象 实现方式 将类的构造函数私有拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象 提供一个静态的成员函数在该静态成员函数中完成堆对象的创建 方案一析构函数私有化 正常创建对象会自动调用析构函数将析构函数私有化外部代码将无法直接调用delete来销毁对象因为这将尝试访问一个不可访问的析构函数要想销毁对象就得自己定义成员函数来操作 代码示例 (C) //只能在堆上创建对象 class HeapOnly { public:// 对象的销毁/*static void Destroy(HeapOnly* ptr){delete ptr;}*/// 对象的销毁void Destroy(){delete this;}private:~HeapOnly(){cout ~HeapOnly() endl;} };int main() {HeapOnly* ptr new HeapOnly;//HeapOnly::Destroy(ptr);ptr-Destroy();return 0; }方案二构造函数私有化 通过将构造函数私有化我们可以限制对象创建的方式从而实现只能在堆上创建对象 代码示例 (C) class HeapOnly { public:// 静态的成员函数,完成完成堆对象的创建static HeapOnly* CreateObj(){return new HeapOnly;}private:HeapOnly(){cout HeapOnly() endl;}// 防止别人调用拷贝在栈上生成对象//C98HeapOnly(const HeapOnly copy);//C11HeapOnly(const HeapOnly copy) delete; };int main() {HeapOnly* ptr HeapOnly::CreateObj();//HeapOnly copy(*ptr);return 0; }3. 只能在栈上创建对象 实现方式 将类的构造函数私有提供一个静态的成员函数在该静态成员函数中完成栈对象的创建 思考一下这里的实现方法和上面似乎有点相同但是我们在实现时是否也要像上面一样delete掉拷贝构造呢 静态成员函数 - 完成栈对象的创建 static StackOnly CreateObj(){StackOnly obj;return obj;}// 这里会让对象在堆上创建 StackOnly* ptr new StackOnly(obj); // 如果我们 delete 拷贝构造会发现CreateObj()也会受到影响所以我们只能另辟蹊径 // 我们要从 new 下手让我们不能用 new 来创建对象实现专属的operator new void* operator new(size_t size) {cout void* operator new(size_t size) endl;return malloc(size); }当我们new这类对象时我们会优先调用operator new,而不是全局(就近原则)因此我们delete掉我们自己实现的operator new我们就不能在使用new创建对象 代码示例 (C) // 只能在栈上创建的类 class StackOnly { public:static StackOnly CreateObj(){StackOnly obj;return obj;}// 如果我们将拷贝构造delete那么我们就无法创建对象因为在CreateObj()中也会发生拷贝构造//StackOnly(const StackOnly copy) delete;void* operator new(size_t size) delete;//实现专属的operator new//当我们new这类对象时我们会优先调用operator new,而不是全局(就近原则)/*void* operator new(size_t size){cout void* operator new(size_t size) endl;return malloc(size);}*/private:StackOnly(){cout StackOnly() endl;} };int main() {StackOnly obj StackOnly::CreateObj();// 发生拷贝构造是会在堆上创建类但是我们能不能将拷贝构造delete呢//StackOnly* ptr new StackOnly(obj);return 0; }4. 不能被继承的类 实现方式 C98中构造函数私有化派生类中调不到基类的构造函数就无法继承 C11一个类如果不希望被其他类继承可以通过将其声明为final类来实现 代码示例 (C) // 不能被继承的类 //C98 class A { public:static A GetInstance(){return A();} private:A(){} };// 不能被继承的类 //C11 class A final {// .... };5. 只能创建一个对象(单例模式) 设计模式 设计模式Design Patterns是一种在软件开发中用于解决常见问题的可重用的解决方案。它们不是代码本身而是关于如何组织代码和对象之间关系的一种描述和指导是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结 使用设计模式的目的为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模 式使代码编写真正工程化设计模式是软件工程的基石脉络如同大厦的结构一样 设计模式是面向对象设计原则的体现它们通过提供可重用的解决方案来帮助开发者更好地设计和实现软件系统。在实际开发中可以根据具体的需求和场景选择合适的设计模式来解决问题 ⭐单例模式 一个类只能创建一个对象即单例模式该模式可以保证系统中该类只有一个实例并提供一个访问它的全局访问点该实例被所有程序模块共享。 单例模式的核心在于控制实例的数目节省系统资源并允许全局访问 单例模式有两种实现模式 饿汉模式懒汉模式 饿汉模式 提前创建好程序启动时就创建一个唯一的实例对象 - (提前做好) 优点实现简单 缺点可能会导致进程启动慢且如果有多个单例类对象实例启动顺序不确定 代码示例 (C) class A { public:static A* GetInstance(){return _inst;}void Add(const string key, const string value){_dict[key] value;}void Print(){for (auto kv : _dict){cout kv.first : kv.second endl;}}private:A() // 私有构造函数 {}//限制类外随意创建对象A(const A copy) delete;A operator(const A aa) delete;mapstring, string dict;static A _inst;// 静态实例 }; // 类的外部定义静态实例 A A::_inst;int main() {A::GetInstance()-Add(sort, 排序);A::GetInstance()-Add(left, 左边);A::GetInstance()-Add(right, 右边);A::GetInstance()-Print();return 0; }懒汉模式 第一次用的时候在创建 - (现吃现做) 如果单例对象构造十分耗时或者占用很多资源比如加载插件啊 初始化网络连接啊读取 文件啊等等而有可能该对象程序运行时不会用到那么也要在程序一开始就进行初始化 就会导致程序启动时非常的缓慢。 所以这种情况使用懒汉模式延迟加载更好 优点第一次使用实例对象时创建对象进程启动无负载。多个单例实例启动顺序自由控制 缺点复杂 注意new的懒汉对象一般不需要释放进程正常结束会释放资源 代码示例 (C) class B { public:static B* GetInstance(){// 第一次为空的时候创建对象if (_inst nullptr){_inst new B;}return _inst;}void Add(const string key, const string value){_dict[key] value;}void Print(){for (auto kv : _dict){cout kv.first : kv.second endl;}}static void DelInstance(){if (_inst){delete _inst;_inst nullptr;}} private:B(){}//限制类外随意创建对象B(const B copy) delete;B operator(const B bb) delete;mapstring, string _dict;static B* _inst; // 指针的形式class gc{public:~gc(){DelInstance();}};static gc _gc; };B* B::_inst nullptr; B::gc B::_gc;int main() {B::GetInstance()-Add(sort, 排序);B::GetInstance()-Add(left, 左边);B::GetInstance()-Add(right, 右边);B::GetInstance()-Print();return 0; }懒汉模式并非这么简单后面还要牵扯到线程安全线程安全需要额外处理 6. 总结 随着我们一同探索了C中特殊类的广阔天地相信你已经对这些高级特性有了更深的理解与感悟。特殊类不仅是C语言复杂性和强大功能的体现更是编程艺术的结晶它们以独特的方式解决了传统编程中难以处理的问题提升了代码的效率、安全性和可维护性 学习特殊类的过程实际上是一个不断挑战自我、深化编程思维的过程。它要求我们不仅要掌握语法层面的知识更要理解其背后的设计思想和实现原理。只有这样我们才能真正驾驭这些特殊类将它们灵活地应用于实际开发中解决实际问题 用一句话总结一下就是“掌握C特殊类就是掌握了一种强大的编程工具它将助你在编程的世界里走得更远、更稳。” 愿你在未来的编程道路上能够勇往直前、不断突破自我创造出更多优秀的作品和成果 希望本文能够为你提供有益的参考和启示让我们一起在编程的道路上不断前行 谢谢大家支持本篇到这里就结束了祝大家天天开心
http://www.hkea.cn/news/14322481/

相关文章:

  • wordpress 单页 多页上海seo网站策划
  • 特价旅游机票网站建设企业所得税怎么算的
  • 公网ip 做网站兴盛优选购物平台下载
  • 为什么网站要改版南昌app定制
  • 兰陵住房建设局网站互联网平台是做什么的
  • 做网站的公司成本十款看免费行情的软件
  • 杭州网站改版北京网站建设首选石榴汇
  • 网站开发技术支持做外贸网站哪家效果好
  • 应聘网站建设工程师北京王府井大街
  • 石家庄网站seowordpress七牛云教程
  • 制作网站付费软件广州小程序app定制开发
  • word链接点进去是网站怎么做上海网络推广外包公司
  • 常德市建设网站wordpress模板淘宝客模板自适应
  • 网站建设需要多少费用seo综合查询工具
  • 做模型的网站有哪些内容seo教程网
  • 自身网站的建设和推广力度不足宿州高端网站建设公司
  • 斗门区建设局网站买一个软件大概多少钱
  • 一般做网站服务器的cpu网站的经典推广方法
  • 在潮州哪里找做网站的信息服务平台的优势和劣势
  • 中型网站网站备案需要ftp吗
  • 企业网站和信息化建设制度建设网点查询
  • 网站建设要不要监理十堰企业网站制作公司
  • 网站布局策划企业做网站流程
  • 美食网站主页怎么做用网站源码做网站
  • 建设银行互联网站旅游网站首页制作
  • 苏州企业建设网站价格seo排名怎么看
  • 一个网站怎么做提现自动到账wordpress页码数量
  • 色一把做最好网站建设银行网银登录
  • 做网站买一个域名就够了吗室内设计培训多久
  • 优购物官方网站购物html制作电影网站