ICANN认证国际域名顶级注册机构
网站建设,域名注册,空间租用,软件销售,广告设计 域名注册,空间租用, 网站建设,东莞网页设计,域名注册,网站推广,网站开发,网页设计 网站推广,,百度推广,新浪推广,雅虎推广,网易推广 标志设计,画册设计,包装设计,VI策划,企业形象顾问 连邦软件加盟店,提供销遥行,管家婆,速达,用友ERP,诺顿等软件报价及销售 建站必读 腾达网络,上网帮助中心, 腾达为东莞等地,提供网站建设,网站推广,广告设计,软件销售等优质服务!
建站必读


 
 
当前位置:首页 -> 建站必读 -> .NET技术
温故知新----再谈构造函数(转:不转了)
温故知新



                   ----再谈构造函数



作者:HolyFire



如果不知道构造函数的请先看一下《由始至终----构造与析构》,看过的我就不再多言,直接转入话题。



定义一个类的的实例的时候,可以看到这样的形式



classA a;        //构造函数不需要参数



不需要参数的构造函数称之为缺省构造函数。



不需要参数有两种情况



1:构造函数没有参数



2:构造函数有参数但可以不给出



class A{



public:



       A();          //构造函数没有参数



       A( int I = 10 );  //构造函数的参数有缺省值,可以不用给出



};



这两种情况都是缺省构造函数,但是由于缺省构造函数的特殊性(他是被自动调用的),编译器无法判断需要调用那一个,所以规定缺省构造函数只能有一个。



缺省构造函数的出现,意味着一个类型可以不依赖约束条件而被创建,就象一些细小的单元,质子,中子和电子,他们的有很大的类似性,不需要用条件来分辨他们被创建的信息。当然不需要用条件来分辨他们被创建的信息也包含了第二种情况,从流水线上生产的统一品种的产品很多都是用同一种方式的,那么创建他们的信息基本一致,也就是所符合第二种情况,参数可以采用缺省值。



这个例子我们可以举一个例子,我们创建一个指针类的时候,常常把他指向的内容置为空值,这很容易理解,我们需要一个指针,但是现在还不知道指向谁,等到我们要使用它的时候,不一定是知道他是否指向过别的对象,为了简化问题,一开始就将他置空,但是有时候我们需要用参数在创建的时候就给出指向的对象,特别是在产生临时对象的时候尤为管用,那么,我们使用一个参数缺省值为空的缺省构造函数。



classA a( a1 );    //构造函数有参数,而参数为一个相同的类型



这样的构造函数叫做拷贝构造函数,意思就是将类一个实例的内容复制到新创建的实例中去,为什么要这么做呢。我们来研究一下。



我们平时使用基本类型的时候,可以使用赋值语句,将相同类型的某个对象的内容赋给另一个对象



int a = 3;



int b;



b = a;     //这样的话,b中就有和a一样的内容了



还可在允许的情况下使用不同类型的赋值



int a = 3;



long b;



b = a;    //这样的话,b也能包含有和a一样的内容了



我们在设计类的时候应该也是将一个类作为一个个体,一个类型来处理,而且在现实中这样的行为也是存在的,一个人的个人资料可以写在不同的纪录簿上,一个软件可以拷贝好几份。



所以在面向对象编程中,这个问题不容忽视。



回到基本类型上,基本类型的处理编译器完成了,在C++中很简单,基本类型占用存储空间是连续的,所以不管原来的内容是什么,只要照搬照抄就可以了,这种负值方式叫做逐位拷贝,简称位拷贝。



int a = 3;



int b;



假设:对象在内存中的存储顺序是先高后低,每个内存单元为1字节(BYTE)=8位(BIT)



//假设这是a(int)的存储空间



0

3





//假设这是b(int)的存储空间



?

?





b =a ;



//将a的内容拷贝到b中



0

3





| |   | |



?

?





//a



0

3





//b



0

3





我们设计的类在内存中也是连续的,使用这样的拷贝方法会得到一个一模一样的同类型实例。而且编译器我们处理了这一件事(C++的编译器真好,它能解决的事,就不用麻烦我们了),也就是说即使我们没有定义拷贝构造函数,编译器也会在需要使用的时候,自己产生一个拷贝构造函数,使用的方法就是位拷贝。但是这样好吗,使用这种方法产生的新类可以安全的工作吗,应该有不少朋友已经产生了疑问。



什么时候可以让编译器自己处理拷贝构造函数。



#include <iostream>



using namespace std;



class A{



private:



        int x;



        int y;



        int z;



public:



        A():x(0),y(0),z(0){ }



        A( int _x = 0 , int _y = 0 , int _z = 0 ):x(
 
 
本站关键词:
|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广||东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|东莞商标设计|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|
域名注册 | 虚拟主机 | 网站建设 | 网站推广 | 广告设计 | 帮助中心 | 软件中心 | 关于腾达
东莞市腾达信息工程有限公司      本站网络实名: 东莞网站建设
地址:东莞市新城市中心区第一国际B座610   邮编:523007
电话:0769-22026071 22026072 传真:0769-22026076 24小时服务热线:13712032014
© 2002~2005 腾达网络   版权所有