• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 浅谈C++ Explicit Constructors(显式构造函数)

浅谈C++ Explicit Constructors(显式构造函数)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ explicit,c++中explicit,constructors,hookallconstructors,default constructors等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C++ 为类(Class)提供了许多默认函数。如果自己没有申明,编译器会为我们提供一个copy构造函数、一个copy assignment操作符和一个析构函数。此外,如果没有申明任何构造函数,编译器会为我们申明一个default构造函数。很像下面的Empty类:

class Empty{
  public:
    Empty();
    Empty(const Empty &rhs);
    ~Empty();
    Empty& operator=(const Empty &rhs);
};
</div>

就像Effective C++说的,如果不想使用编译器自动生成的函数,就应该明确拒绝。

1.C++中的隐式构造函数

如果c++类的其中一个构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。

2.Explicit Constructors显式构造函数

为了避免上面提到的只有一个参数的构造函数采用的缺省转换操作,在构造函数前,使用Explicit 关键字修饰即可。

3.如下面的例子:

#include <iostream>
using namespace std;
class B{
  public:
    int data;
    B(int _data):data(_data){}
    //explicit B(int _data):data(_data){}
};

int main(){
  B temp=5;
  cout<<temp.data<<endl;
  return 0;
}
</div>

程序第11行,将int转换为B类型的对象,就是使用了隐式构造函数。因为B中存在一个只有一个参数的构造函数,且参数类型也是int。

如果在构造函数前加explicit ,表示为显示构造函数,则第11行编译不能通过。因为这时,就没有隐式构造函数啦。

以上这篇浅谈C++ Explicit Constructors(显式构造函数)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++中的explicit关键字实例浅析
  • 浅谈C++ Explicit Constructors(显式构造函数)
  • C++ explicit构造函数实例解析
  • C++ explicit关键字的应用方法详细讲解
  • C++ Explicit关键字详细解析

相关文章

  • 2017-05-28C/C++中提高查找速度的小技巧
  • 2017-05-28C/C++中如何判断某一文件或目录是否存在
  • 2017-05-28C++实现从输入中读取字符串
  • 2017-05-28C语言中函数与指针的应用总结
  • 2017-05-28基于C语言指令的深入分析
  • 2017-05-28C语言对栈的实现基本操作
  • 2017-05-28C语言中const,volatile,restrict的用法总结
  • 2017-07-23YUV格式与RGB格式的相互转换公式及C++代码
  • 2017-05-28C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例
  • 2017-05-28使用C++递归求解跳台阶问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C 语言restrict 关键字的使用浅谈
    • C++采用TLS线程局部存储的用法实例
    • C语言的递归思想实例分析
    • 解析C语言与C++的编译模型
    • C++实现数组的排序/插入重新排序/以及逆置操作详解
    • C语言中正切的相关函数总结
    • c++传递函数指针和bind的示例
    • 通过c++11改进我们的模式之改进命令模式
    • 引用参数和传值参数的区别深入解析
    • 解析c语言中"函数调用中缺少哨兵"的情况分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有