博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造函数的那些事
阅读量:6215 次
发布时间:2019-06-21

本文共 1813 字,大约阅读时间需要 6 分钟。

    构造函数:是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。

--百度百科

          析构函数和构造函数相相应。它的功能是释放对象的内存空间。为了便于分析和理解,博客内容增加了析构函数。而且将初始化列表单独拿出来分析。博客结构:

   具体内容例如以下:

  构造函数:

1 构造函数是干什么的?

    当一个类对象被创建时,编译系统后须要为对象分配内存空间,C++中这个工作是由构造函数来完毕。须要注意的是。初始化不等于赋值,初始化即分配空间,赋值是向内存空间插入数据。

2构造函数都有那些类型?

    默认构造函数:即假设没有显示的写出构造函数,系统将会自己主动生成一个构造函数,这个构造函数没有參数,函数体为空,它什么都不做。

    一般构造函数(或者叫做重载构造函数):一个类构造函数能够有多个构造函数,參数的不同,就能够形成函数的重载。创建对象时依据參数来推断详细调用哪个构造函数;

    复制构造函数:当类对象本身的引用作为构造函数的參数时,构造函数会复制出一个新的对象,已存在的对象的数据成员的值会被拷贝到新创建的对象中。

3 构造函数有那些特点?

    构造函数的命名必须和类名全然同样;构造函数用于完毕对象初始化。所以它没有返回值,不能用不论什么数据类型来修饰它;构造函数不能被显示调用(父类构造函数带參数除外),仅仅能在创建对象时由编译器自己主动调用。假设一个类仅仅定义了私有的构造函数,将无法通过newkeyword创建其对象。构造函数不能够是虚函数。

二析构函数:

    析构函数和构造函数向相应,它是为了释放对象内存而存在的。它不能被显式调用,仅仅能在删除对象时由编译器调用;它没有返回值,所以不能用不论什么(包含void)修饰;没有參数(不能重载)。

三构造函数的初始化列表:

         1 为什么使用初始化列表?构造函数初始化类的成员有两种方式。一是使用初始化列表,二是在构造函数体内进行赋值操作。这两种方式有什么差别?使用初始化列表,那么构造函数在创建对象时分配内存空间,而且直接进行赋值;假设是在函数体内赋值,那么首先要调用构造函数分配内存,然后调用函数体进行赋值操作,也就是赋值操作须要比初始化列表多一个步骤,对于成员变量较少的类没有差别。可是对于有大量的成员变量的类,创建对象就是一种灾难。

    2 初始化列表的一般格式:

Class A{    Private:	int a;	Int b;    Public:	A(int _a,int_b):a(_a),b(_b) {}}

对于无默认构造函数的继承关系:

Class person{    Public:	Person(string name,string sex):_name(name),_sex(sex)  {}    Private:	String _name;	String _sex;}Class man :public person{    Public :	Man(string name ,string sex, string age):person(name,sex),_age(age)	{}    Private:	String _age;}

  3 那些对象初始化必需要使用初始化列表?

(1) const常量 const常量不能被赋值。仅仅能初始化,所以须要使用初始化列表。

Class A{    Public :	A(int b):_b(b) {}        //正确	A(int b) {_b =b;}       //错误。常量不能赋值。

Private: <span style="white-space:pre"> </span>Const int _b; }

注意,上述两个构造函数不能共存。

(2) 含有自己定义数据类型(类)对象的初始化

Class Person{    ;}Class Man{    Public :	Man(Person & sa): _sa(sa) {}    Private:	Person _sa;}

(3) 引用类型。引用必须在定义的时候初始化,而且不能又一次赋值。所以也要写到初始化列表中。

Class A{   Public :	A(int r):_r(r) {}   Private:	Int  &_r;}

构造函数内容繁琐,非常多细节须要重复去验证。

以上为个人理解,如有错误,敬请指正。

你可能感兴趣的文章
linux下redis安装
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
App开发中甲乙方冲突会闹出啥后果?H5 APP 开发可以改变现状吗
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
Myeclipes快捷键
查看>>
癌细胞最偏爱10个字,你却每天都在喂养“它”!
查看>>
我的友情链接
查看>>
ToRPC:一个双向RPC的Python实现
查看>>
Ubuntu 14 Open Ldap Add Root
查看>>
Vim脚本 - 竖线'|' 和反斜线'\'
查看>>
netty框架的学习笔记 + 一个netty实现websocket通信案例
查看>>