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

做网站后台数据库建设快速排名优化推广价格

做网站后台数据库建设,快速排名优化推广价格,工会网站建设,安阳区号为什么是0372文章首发公众号:iDoitnow 1. 特殊的成员函数 C11在原有的4个特殊成员函数(默认构造函数、复制构造函数、复制赋值运算符和析构函数)的基础上新增了移动构造函数和移动赋值运算符。这些特殊成员函数在各种情况下是会通过编译器自动提供的。 …

文章首发公众号:iDoitnow

1. 特殊的成员函数

C++11在原有的4个特殊成员函数(默认构造函数、复制构造函数、复制赋值运算符和析构函数)的基础上新增了移动构造函数和移动赋值运算符。这些特殊成员函数在各种情况下是会通过编译器自动提供的。

  • 默认构造函数:如果未定义任何构造函数,编译器将提供一个默认构造函数,对于类成员则调用其默认构造函数(对于内置的成员,默认构造函数不对其进行初始化。如果使用者提供了移动构造函数,编译器将不会自动提供默认构造函数)。
  • 复制构造函数:如果未定义复制构造函数,而代码有需要使用它,编译器将提供一个默认的复制构造函数。(如果使用者提供了类的移动构造函数的情况下,编译器将不会自动提供复制构造函数)
  • 移动构造函数:如果未定义移动构造函数,而代码有需要使用它,编译器将提供一个默认的移动构造函数。(如果使用者提供了类的析构函数、复制构造函数、复制赋值运算符或移动赋值运算符的情况下,编译器将不会自动提供移动构造函数)
  • 复制赋值运算符:如果未定义复制赋值运算符,而代码有需要使用它,编译器将提供一个默认的复制赋值运算符。(如果使用者提供了移动赋值运算符,编译器不会自动提供复制赋值运算符)
  • 移动赋值运算符:如果未定义移动赋值运算符,而代码有需要使用它,编译器将提供一个默认的移动赋值运算符。(如果使用者提供了复制构造函数、移动构造函数、复制赋值运算符或析构函数,编译器不会自动提供移动赋值运算符)

当用户在定义某些特殊函数后,导致另外某个特殊函数不会自动创建,这时候用户仍可以使用关键词 default 强制编译器生成隐式声明的目标特殊成员函数函数。例如用户定义了移动构造函数,编译器不会自动构建默认构造函数、复制构造函数和复制赋值运算符,这种情况下我们可以通过default强制编译器创建这些方法的默认版本:

class A{public:A(A &&);A() = default;A(const A&) = default;A & operator = (const A&) = default;
};

同时,有些时候,我们不希望编译器为我们提供某个特殊的成员函数默认版本,我们可以使用关键字delete来禁止编译器使用特定方法。关键字default只能用于这个6个特殊的成员数(默认构造函数、复制构造函数、复制赋值运算符、移动构造函数、移动赋值运算符和析构函数),但delete可以用于任何成员函数。例如:

class A{public:A() = delete;//禁止编译器生成默认构造函数void readDoubleNum(double);
}class B{public:B() = delete;//禁止编译器生成默认构造函数void readDoubleNum(double);void readDoubleNum(int) = delete;//禁用readDoubleNum函数的特定转换
};A a;
a.readDoubleNum(5.0);//正确
a.readDoubleNum(5);//正确,int值5将被转换为5.0,进而执行readDoubleNum(double)方法B b;
b.readDoubleNum(5.0);
b.readDoubleNum(5);//错误,其与readDoubleNum(int)原型匹配,编译器检测到该方法被禁用后,在编译阶段就会报错,防止int到double的特定转换

2. override和final

  • override标识符

    override说明符的作用是用来指定一个虚函数覆盖另外一个虚函数。其用法如下:

    class A{virtual void fun();...
    };class B : A{void fun() override;//B::fun将覆盖A::fun...
    };
    

    C++11引入override标识符的目的就是为了在重写基类的方法时候,防止重写方法的类型、名称和参数列表因为人为因素造成其与基类的不一致,无法使用多态。使用override标识符将重写的检查工作(重写方法的类型、名称和参数列表要与基类的保持一致)交给编译器处理,减少人为出错的可能。

  • final标识符

final标识符的作用是指定某个虚函数不能在派生类中被覆盖,或者某个类不能被派生。其使用方法如下:

calss A{virtual void fun();
};class B : A{void fun() final;//A::fun被覆盖,而且B::fun是最终被覆盖函数void ba() final;//错误,ba非虚函数,因此它不能是final
};class C final: B{//C为finalvoid fun() override;//错误,fun不能被覆盖,因为其在B中为final
};class D : C{};//错误,因为类C位final,其不可以被派生

参考文献

C++ Primer Plus(第六版) - 第18章 探讨C++新标准
C++ 参考手册

http://www.khdw.cn/news/22780.html

相关文章:

  • 网站 详细设计经典软文案例分析
  • 微网站微信数据库设计今天全国疫情最新消息
  • 领地网做网站咋加文章郑州网站运营实力乐云seo
  • js wordpress 菜单管理系统关键词seo排名公司
  • 邯郸网站制作与建设2024最火的十大新闻
  • 西安公司网站费用常用的营销策略
  • 免费模板网站都有什么用电视剧百度风云榜
  • 一图读懂制作网站百度明星人气榜
  • 域名解析后网站怎么建设个人网站免费制作平台
  • 手机网站开发成app服务推广软文
  • 公司网站设计好seo广告优化多少钱
  • 学校网站建设分工农技推广
  • 网站制作公司中企动力推荐如何做地推推广技巧
  • 网站后台html网站域名查询ip
  • 在线教育网站开发经验简历填写百度指数搜索热度大学
  • 铁路建设监理网站最近国际时事热点事件
  • 东莞建网站哪家强重庆网站排名公司
  • 已有域名 做网站电商运营推广
  • 网站建设的重要性网络营销公司排行榜
  • wap 2.0的网站百度官方网站首页
  • 鲜花销售网站模板蚌埠网络推广
  • 网站建设方案书 个人互联网推广是做什么的
  • 建设银行的官方网站高铁纪念币百度电脑版入口
  • 南京哪家做电商网站网络公司起名
  • 关于网站备案的44个问题论坛seo教程
  • 重庆做网站需要多少钱免费入驻的电商平台
  • 南通快速建设网站服务大学生创新创业大赛
  • 做百科需要发哪些网站中山seo关键词
  • python 做办公网站seo的主要分析工具
  • 网站推广的作用是免费建站建站abc网站