浅析构造函数之默认构造函数

C++的默认构造函数可谓“博大精深”,一度把博主我搞的晕头转向的,各种跪,后来久经曲折,终于得了那么一点门道。。。

谨记一句话,构造函数的工作是保证每个对象的数据成员具有合适的初始值!额,也许你会说这个连幼稚园小朋友都知道的不是么,不过,或许我们真的不如幼稚园小朋友呢。。

构造函数里感觉最让人头疼的是默认构造函数(default constructor),default constructor是一个可被调用而不带任何实参的函数,这样的函数或者没有实参,或者每个参数都有缺省值。

如果类没有定义构造函数,那么编译器就会帮你生成一个合成的默认构造函数(synthesized default constructor),其初始化规则和变量的初始化规则相同。额,这里呢,先废话再说一下变量的初始化规则。

对于内置变量来说,变量定义的位置决定了它是否自动初始化。对于全局作用域里的内置变量会初始化为0,一般情况下,定义在函数体内的内置变量是不会进行初始化的(在VS2012中,使用未初始化的变量会导致编译无法通过,所以个人经验是如果在函数体内定义变量的时候没有有意义的值对其初始化,可以先临时将其赋值为0。),不过对于静态变量却是例外,静态局部变量和全局变量的一样,会自动初始化为0.

对于类类型变量,如果没有提供初始化式,那么就会使用default constructor,不管变量在哪定义,默认构造函数都会被使用(如果类包含内置类型变量,且对象定义在函数体外,或者是静态局部变量,那么其内置类型成员变量会初始化为零,若为普通局部变量,那内置类型成员会被赋予某个任意值,vs2012中并没有提示编译错误,标准c++编程还没有试过,改天试一下),对于string类型,会将变量初始化为空串(全局、局部均是)。

有些类类型是没有默认构造函数的,记住开头我们说的话,构造函数的工作是保证每个对象的数据成员具有合适的初始值,所以这种情况下,我们需要显示提供初始化式。

扯的有点远了,回过头来继续研究我们的默认构造函数,如果定义了其他构造函数,那么提供一个默认构造函数几乎总是对的,通常,在默认构造函数中给成员提供的初始值应该指出该对象是“空”的。如果没有default constructor,那么该类不能进行如下动作:

1)不能做动态分配数组的元素类型,当然还是可以用new来创建一个对象的,只是得提供显示初始化式,静态分配数组和其情况一样。

2)做容器元素的时候,如vector,不能使用其仅接受一个容器大小参数的构造函数。

3)若定义一个默认构造函数,那么就必须显示初始化该类成员。

定义默认构造函数的方式常有如下几种,假设有类A,且仅包含两个int型的成员变量a和b

1)

A():a(5),b(4){}
2)
A(int x=3,int y=4){a=x;b=y;}

3)

A(){a=3;b=4}

从上述几种定义方式可以看出,自定义默认构造函数正是一个可被调用而不带任何参数,而且对其成员变量都有显示初始化的函数。

在C++11中刚加入了一个default函数,正如上文所说的,如果你自己定义了一个构造函数,那么编译器就不会为你自动生成一个默认构造函数了,所以为了使编译器生成的和我们自己定义的能够共存而引入了default函数,其格式如下所示:

class A
{
public:
     A()=default;
     A(int x);
private:
     int a;
};
如果执行A m语句,那么程序将会调用编译器自动生成的构造函数(不过上述语句在VS2012中无法编译通过,需要使用g++编译)。与default函数对应的是delete函数,也是C++11的新特性,default是告诉编译器产生一个默认的,而delete则是告诉编译器不要产生默认的,delete有一个最大的用途是防止对象拷贝,其具体介绍在“复制控制”一文。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的高校科研信息管理系统实现了操作日志管理、字典管理、反馈管理、公告管理、科研成果管理、科研项目管理、通知管理、学术活动管理、学院部门管理、科研人员管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让高校科研信息管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值