C++二阶构造函数】的更多相关文章

转自:http://blog.51cto.com/9291927/1896411 一.构造函数的问题 构造函数存在问题: A.构造函数只提供自动初始化成员变量的机会 B.不能保证初始化逻辑一定成功,如申请系统资源可能失败 C.执行return语句后构造函数立即结束 构造函数创建的对象可能是半成品对象,半成品对象是合法的对象,但是是程序bug的来源之一.因此实际工程开发过程中使用二阶构造模式. 二.二阶构造模式 由于构造函数存在的潜在问题,实际工程开发中类对象的构造过程如下: A.资源无关的初始化…
首先回顾以前所学的构造函数 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在定义时被自动调用 由于构造函数没有返回值不能判断执行结果,所以不能保证初始化对象能否成功 比如: class Test{ private: int *p; public: Test(int i) { p=new int(i); } } 假如创建对象时,执行new分配时失败了,便会出现bug,若代码量大,是很难找到这个问题的,这种便被称为半成品对象. 如何来避免半成品对象的诞生呢? 就要用到本章学的…
前言:C++中经常会因为调用系统资源失败导致出现BUG,所以在类调用构造函数需要分配系统资源时会出现BUG,从而导致类对象虽然被创建,但是只是个半成品,为了避免这种情况需要使用二阶构造模式 二阶构造模式 源码如下 // 二阶构造.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; class test { private: int d; test();//一阶…
0.目录 1.构造函数与半成品对象 2.二阶构造 3.小结 1.构造函数与半成品对象 关于构造函数: 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义时自动被调用 问题: 如何判断构造函数的执行结果? 在构造函数中执行return语句会发生什么? 构造函数执行结束是否意味着对象构造成功? (没有办法判断构造函数的执行结果,构造函数执行结束不意味着对象构造成功) 用一个状态来表示对象是否构造成功: #include <stdio.h> class Test { i…
1.如何判断构造函数的执行结果? 构造函数没有返回值,所以不能通过返回值来判断是构造函数是否构造成功. 如果给构造函数强行加入一个返回值,用来表示是否构造成功.这样确实能够反映出构造的结果,但是不够优雅,有点呆. 2.在构造函数中执return 会发生什么? 当构造函数中执行return后构造函数直接返回,后面的程序将不能被执行到.这样将产生一个“半成品对象”. 3.构造函数执行结束是否意味着对象构造成功? 如果构造函数中具备申请内存的操作,那么申请内存的操作不可能百分之百成功,所以构造函数执行…
1,关于赋值的疑问: 1,什么时候需要重载赋值操作符? 2,编译器是否提供默认的赋值操作符? 2,关于赋值的疑问: 1,编译器为每个类默认重载了赋值操作符: 1,意味着同类型的类对象可以相互赋值: 2,默认的赋值操作符仅完成浅拷贝: 3,当需要进行深拷贝时必须重载赋值操作符: 1,和拷贝构造函数相同: 4,赋值操作符与拷贝构造函数有相同的存在意义: 3,默认赋值操作符重载编程实验: 1,main.cpp 文件: #include <iostream> #include <string&g…
构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用:帮助我们初始化对象(给对象的每个属性依次的赋值) 构造函数是一个特殊的方法: 1).构造函数没有返回值,连void也不能写. 2).构造函数的名称必须跟类名一样. 3).构造函数有无参和有参之分. 创建对象的时候会执行构造函数,构造函数是可以有重载的. *** 类当中会有一个默认的无参数的构造函数,…
一.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下面的例子所示. function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.s…
根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术(有时候也叫做伪造对象或经典继承).这种技术的基本思想相当简单,即在子类型构造函数的内部调用超类型构造函数. 基本模式 function SuperType(){ this.colors = ["red", "blue", "green"]; } fu…
早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象.PHP的面向对象语法是从JAVA演化而来,很多地方类似,但是又发展出自己的特色.以构造函数来说,PHP4中与类同名的函数就被视为构造函数(与JAVA一样),但是PHP5中已经不推荐这种写法了,推荐用__construct来作为构造函数的名称. 1.重写子类构造函数的时候,PHP会不调用父类,JAVA默认在第一个语句前调用父类构造函数 JAVA class Father{ public Father(){ Sy…