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

//tc.h
class A{
private:
int i;
public:
A(){};
A(int ii);
};

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

//tc,h
class A{
private:
int i;
public:
A();
A(int ii)。
};

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

#include <iostream>
#include "tc.h"
using namespace std;
A::A(){//必须给出事实上现
};
A::A(int ii){
i=ii;
}
void A::show()const{
std::cout<<"this is A object!"<<std::endl;
};
int main()
{
A a;
a.show();
}

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

//tc.h
#ifndef tc_h_
#define tc_h_
class A{
private:
int i;
public:
A()=default;//default
A(int ii);
void show()const;
};
#endif
//tc.cpp
#include <iostream>
#include "tc.h"
using namespace std;
/*
A::A(){//不必给出事实上现
};
*/
A::A(int ii){
i=ii;
}
void A::show()const{
std::cout<<"this is A object!"<<std::endl;
};
int main()
{
A a;
a.show();
}

编译以及运行结果:

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

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

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

//tc.h
#ifndef tc_h_
#define tc_h_
class A{
private:
int i;
public:
A()=delete;//delete
void show()const;
};
#endif
//tc.cpp
#include <iostream>
#include "tc.h"
using namespace std;
/*
A::A(){//必须给出事实上现
}; A::A(int ii){
i=ii;
}*/
void A::show()const{
std::cout<<"this is A object!"<<std::endl;
};
int main()
{
A a;
a.show();
}

编译结果:

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

事实上这个问题有点多余,由于假设你不想要这个构造函数,你不定义这个带參的构造函数就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. Inside GDALAllRegister之四: 跳过driver

    这个函数很短小: /** * \brief This method unload undesirable drivers. * * All drivers specified in the space ...

  2. git命令 add -a和add .和add -u 的区别

    总结: git add -a 所有的更改操作--新建,更改,删除: git add . 只包括 新建 ,修改操作:无删除: git add -u 只包括修改,删除操作,无新建: 示例: git ini ...

  3. Ubuntu系统环境变量配置文件(转)

    原文:http://www.cnblogs.com/eastson/archive/2012/06/15/2550151.html 在Ubuntu中有如下几个文件可以设置环境变量: /etc/prof ...

  4. Linux用户、组帐号和权限(学习笔记九)

    一.用户分类 超级用户:root 普通用户:由超级用户和管理员创建,一般只在自己的目录中有完全的权限 程序用户: 二.用户账号管理 常用命令: useradd:添加用户 userdel:删除用户 pa ...

  5. weblogic.servlet.proxy.HttpProxyServlet 进行代理设置

    1:代理访问服务器应用配置 A:192.168.0.11 B:192.168.0.12 访问:http://192.168.0.11:9001/test/test.jsp 代理服务直接代理访问: ht ...

  6. 如何分析Java虚拟机死锁

    Thread Dump and Concurrency Locks Thread dumps are very useful for diagnosing synchronization relate ...

  7. URI是什么意思?URI和URL有什么区别?

    URI是什么意思?URI和URL有什么区别? 详解! HTTP = Hyper Text Transfer ProtocolURI = Universal Resource IdentifierURL ...

  8. 解决Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉

    有这种错误让人很恼火,因为并不知道是哪个文件引起的整个项目错误.所以我们可以打开下边的错误按钮,看看是什么问题. 1.如果是因为java compiler level does not match t ...

  9. 【Docker】安装tomcat并部署应用

    安装tomcat 1.拉取tomcat镜像 docker pull docker.io/tomcat 查看镜像 docker images 2.启动tomcat 首先添加8090端口:firewall ...

  10. python 2.7疑难问题之 编码

    #http://www.cnblogs.com/bluescorpio/p/4303656.html •在遇到错误提示时,注意查看错误提示内容,同时注意查看type类型. 1.TypeError: d ...