在早期的C++中。假设须要一些接受一些參数的构造函数,同一时候须要一个不接收不论什么參数的默认构造函数。就必须显示地编写空的默认构造函数.比如:

  1. //tc.h
  1. class A{
  2. private:
  3. int i;
  4. public:
  5. A(){};
  6. A(int ii);
  7. };

但最好就是接口和声明分离。那么就是例如以下的定义

  1. //tc,h
  2. class A{
  3. private:
  4. int i;
  5. public:
  6. A();
  7. A(int ii)。
  8. };

这样,就必须在实现中给出空參数构造函数的实现:

  1. #include <iostream>
  2. #include "tc.h"
  3. using namespace std;
  4. A::A(){//必须给出事实上现
  5. };
  6. A::A(int ii){
  7. i=ii;
  8. }
  9. void A::show()const{
  10. std::cout<<"this is A object!"<<std::endl;
  11. };
  12. int main()
  13. {
  14. A a;
  15. a.show();
  16. }

为了避免手动编写空默认构造函数,C++11引入了显示默认构造函数的概念,从而仅仅需在类的定义中编写空默认构造函数而不须要在实现文件里提供事实上现:

  1. //tc.h
  2. #ifndef tc_h_
  3. #define tc_h_
  4. class A{
  5. private:
  6. int i;
  7. public:
  8. A()=default;//default
  9. A(int ii);
  10. void show()const;
  11. };
  12. #endif
  1. //tc.cpp
  2. #include <iostream>
  3. #include "tc.h"
  4. using namespace std;
  5. /*
  6. A::A(){//不必给出事实上现
  7. };
  8. */
  9. A::A(int ii){
  10. i=ii;
  11. }
  12. void A::show()const{
  13. std::cout<<"this is A object!"<<std::endl;
  14. };
  15. int main()
  16. {
  17. A a;
  18. a.show();
  19. }

编译以及运行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE4NDQzNTIxNTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

相同的,C++还支持显式删除构造函数的概念。

比如。你想定义一个类。这个类没有不论什么的构造函数,而且你也不想让编译器自己主动生成一个默认的空參数的构造函数,那么你就能够显式地删除默认构造函数。

  1. //tc.h
  2. #ifndef tc_h_
  3. #define tc_h_
  4. class A{
  5. private:
  6. int i;
  7. public:
  8. A()=delete;//delete
  9. void show()const;
  10. };
  11. #endif
  1. //tc.cpp
  2. #include <iostream>
  3. #include "tc.h"
  4. using namespace std;
  5. /*
  6. A::A(){//必须给出事实上现
  7. };
  8.  
  9. A::A(int ii){
  10. i=ii;
  11. }*/
  12. void A::show()const{
  13. std::cout<<"this is A object!"<<std::endl;
  14. };
  15. int main()
  16. {
  17. A a;
  18. a.show();
  19. }

编译结果:

能够看到,默认构造函数被删除了。那么。能不能删除一些其它的带參数构造函数呢?

事实上这个问题有点多余,由于假设你不想要这个构造函数,你不定义这个带參的构造函数就OK了!

C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数的更多相关文章

  1. SQL反模式学习笔记16 使用随机数排序

    目标:随机排序,使用高效的SQL语句查询获取随机数据样本. 反模式:使用RAND()随机函数 SELECT * FROM Employees AS e ORDER BY RAND() Limit 1 ...

  2. Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行

    Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候 ...

  3. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  4. Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer

    Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer: 启动Zookeeper 启动Kafka0.11 创建一个新的Topic: ./kafk ...

  5. Spring装配bean(在java中进行显式配置)

    1.简单介绍 Spring提供了三种装配机制: 1.在XML中进行显式配置: 2.在java中进行显式配置: 3.隐式的bean发现机制和自动装配. 其中,1和3项在项目中经常使用,而在java中进行 ...

  6. [原创]java WEB学习笔记38:EL 中的 11个 隐含对象 详解

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  8. [C#] 类型学习笔记一:CLR中的类型,装箱和拆箱

    在学习.NET的时候,因为一些疑问,让我打算把.NET的类型篇做一个总结.总结以三篇博文的形式呈现. 这篇博文,作为三篇博文的第一篇,主要探讨了.NET Framework中的基本类型,以及这些类型一 ...

  9. Android(java)学习笔记110:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

随机推荐

  1. Oracle体系结构二(学习笔记)

  2. HDU 2883 kebab(最大流)

    HDU 2883 kebab 题目链接 题意:有一个烧烤机,每次最多能烤 m 块肉.如今有 n 个人来买烤肉,每一个人到达时间为 si.离开时间为 ei,点的烤肉数量为 ci,每一个烤肉所需烘烤时间为 ...

  3. servlet常用操作

      servlet常用操作 CreateTime--2017年9月7日09:36:43 Author:Marydon 1.获取当前应用程序对象 需要导入: import javax.servlet.S ...

  4. linux limits.conf 配置

    转自:http://kerry.blog.51cto.com/172631/300784 limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentic ...

  5. 如何让history命令显示最近所执行过的命令的具体执行时间

    如何让history命令显示最近所执行过的命令的具体执行时间. 步骤如下: 1.以ROOT用户编辑/etc/profile文件,在里面加入下面内容(我一般习惯在最末尾加): export HISTTI ...

  6. SDK Build Tools revision (19.0.3) is too low for project Minimum required is 19.1.0

    假设你正在使用Android Studio工具进行开发,且将版本号更新到0.6.0的时候.莫名的出现这种错误 SDK Build Tools revision (19.0.3) is too low ...

  7. nginx error: upstream prematurely closed connection while reading response header from upstream

    本篇文章由:http://xinpure.com/nginx-error-upstream-prematurely-closed-connection-while-reading-response-h ...

  8. Python实现 K_Means聚类算法

    使用 Python实现 K_Means聚类算法: 问题定义 聚类问题是数据挖掘的基本问题,它的本质是将n个数据对象划分为 k个聚类,以便使得所获得的聚类满足以下条件: 同一聚类中的数据对象相似度较高 ...

  9. 常见Web前端开发笔试题

    1.什么是web标准? WEB标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现(Presentation)和行为 (Behavior). 对应的标准也分 ...

  10. Android 小技巧-- TextView与EditText 同步显示

    方法一.利用View.OnKeyListener"同步"显示 EditText  myEdit = (EditText)findViewById(R.id.myEdit); Tex ...