快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

教你如何优雅地拒绝自作多情的C++-创新互联

教你如何优雅地拒绝自作多情的C++一个含义中立的行为,放在不同的人眼里,就有不一样的解释。就像你帮学妹打开水,如果她喜欢你,那你就是冬天里温柔贴心的暖男,如果她不喜欢你,那你就是路边上自作多情的逗比。

专注于为中小企业提供成都做网站、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业临海免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

教你如何优雅地拒绝自作多情的C++

类比到C++中,他会你不知情的情况下,自动为你准备好①无参构造函数、空析构函数、复制构造函数、赋值操作符函数等一系列基本类成员方法。你说他这是一种温柔贴心呢,还是一种自作多情呢?

这没有标准答案,事情的好坏取决于你所设计的类的需要。在大部分情况下,以上自动生成的类成员方法都是必不可少的,它们提供了一个类对象最起码的特性。但在一些特别的时候,它们却是我们想要摆脱的东西。

比如,你设计一个用来表达一个学生的类,如下

class student

{

  int ID;  // ×××

  string name; // 姓名

  char *data; // 其他信息

};


假如,我们认为以上四类自动生成的类方法都是自作多情,那么我们来看看都怎么躲避并拒绝这些路边的逗比。

首先我们认为任何一个学生对象,都必须有ID和name,因此在定义学生对象的时候我们就要拒绝C++自作多情地自动生成①无参构造函数,这很简单,我们只需要定义任意版本的类构造函数,就可以优雅地拒绝。

通过定义一个构造函数来优雅地拒绝C++自动生成的①无参构造函数

student::student(const int &id, const string &name)

{

  ID = id;

  this->name = name;

  data = new char[100];

}


其次我们认为任何一个学生对象在退出其作用域时,都应该释放其所持有的资源,因此跟构造函数类似,我们可以通过自定义一个析构函数,来拒绝系统自动生成的②空析构函数。

通过自定义析构函数来优雅地拒绝C++自动生成的②空析构函数

student::~student( )

{

  delete [ ] data;

}

再次,我们不希望使用一个学生来初始化另一个学生,也不希望两个学生对象的直接赋值,毕竟,没有任何两个人是一模一样的(就算是同卵双胞胎我们认为也不行),换句话说我们希望以下代码不合法

student Jack(1234, "Jack");

student Rose(Jack);

student Mike = Jack;


仔细分析一下上面的代码,Rose(Jack)实际上是调用了Rose的默认拷贝构造函数,Mike = Jack实际上是调用了Mike的默认赋值操作符函数,emmmm... ... 假如,我们将这两个逗比函数设置为私有private,那会怎样?没错!这样的话以上代码就不合法了,look:

通过private权限来优雅地拒绝C++自动生成③复制构造函数和④赋值操作符函数

class student

{

  ... ...

private:

  student(const student &);

  student &operator=(const student &);

};


以上妙计,可不是林世霖我发明的土办法,实际上这是C++官方标准和Boost库通用的技巧,更进一步,我们可以定义一个专门包含private拷贝构造函数和private赋值操作符函数的特定类Uncopyable,并将之成为所有需要拒绝这些默认类成员方法的类的基类。

一个将③复制构造函数和④赋值操作符函数封印在private权限内部的神奇的基类

class Uncopyable

{

protected:

  Uncopyable(); // 允许派生类调用构造函数

  ~Uncopyable();

private:

  Uncopyable(const Uncopyable &);  // 阻止派生类

  Uncopyable &operator=(const Uncopyable &);

};


接下来,我们只需要让student类继承Uncopyable即可

class student : public Uncopyable

{

  ... ...

};


至此!我们就完美地拒绝了自作多情了C++啦!哦耶!

嘘!听说识别下面二维码进入 微店●秘籍酷能上天遁地,不信你试试!


教你如何优雅地拒绝自作多情的C++


教你如何优雅地拒绝自作多情的C++

微信原文:https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651289178&idx=1&sn=9cbdc8745705bc3d3eb711bb94ba72f3&chksm=8011460fb766cf1946651e3fff0fd68edb2a6c9fca9070e576dc5f2e9b2b19b95918cfe47605#rd

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:教你如何优雅地拒绝自作多情的C++-创新互联
转载源于:http://6mz.cn/article/dihdoe.html

其他资讯