注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

类构造函数  

2014-10-14 16:04:00|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


构造函数在创建对象时被调用,构造函数的名称和类名相同,可以通过函数重载来创建多个构造函数。 构造函数用来初始化类对象,它没有返回类型,原型在类声明的public部分;程序在声明对象时,将自动调用构造函数。无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的,因此构造函数被用来创建对象,不能通过对象来调用。

如果没有提供任何构造函数,C++将自动提供默认构造函数,它是默认构造函数的隐式版本,不做任何工作。

两条构造函数语句:

Class_name  object1 = Constructor(...);

object2 = Constructor(...); //Constructor是构造函数

第一条语句是初始化,创建有指定值的对象object1,可能会创建临时对象;第二条语句是赋值,这样在赋值语句中使用构造函数总会导致在赋值前创建一个临时对象。这两种方法前者的效率更高。

 

假如有语句:

Class_name  object1 = object2;

这种初始化对象的方法不调用构造函数,也不调用默认构造函数,因为它相当于:

Class_name  object1 = constructor(object2);

object2对象的类型问Class_name,那么上句的相应的构造函数原型是:

constructor(const Class_name &);

当使用一个对象来初始化另一个对象时,编译器将自动生成上述构造函数(也就是复制构造函数,因为它创建对象的一个副本)。

举个实际代码的栗子:

class  A{...}; //声明类A

A::A(){....}; //默认构造函数

A::A(const char *){....} //定义构造函数

A  obj1; //声明对象obj1,调用默认构造函数

A  obj2(mihooke); //声明并初始化对象obj2,调用构造函数

A  obj3=obj2; //声明并用对象obj2初始化对象obj3,不调用构造函数,调用复制构造函数

 

当程序生成了对象副本时,编译器都将使用复制构造函数,也就是说当函数按值传递对象(会创建原始变量的一个副本)或函数返回对象时,都会调用复制构造函数;而按引用传递则不会,还可以节省调用构造函数的时间和存储所需的空间。复制构造函数的功能是复制非静态成员的值,即把一个对象的私有成员值(不包括静态成员)挨个赋值给另一个对象。

一般的,如果类中包含了使用new初始化的指针成员,那就要显示定义一个复制构造函数,并在函数中重新复制指针成员指向的字符串,而不是简单把原先的字符串地址赋值,这称为深度复制。

  评论这张
 
阅读(66)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017