<转载>构造函数与拷贝构造函数
原文地址http://www.cnblogs.com/waynelu/archive/2012/07/01/2572264.html
- 构造函数
构造函数、析构函数与赋值函数是每个类最基本的函数。
对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如:
A(void); // 缺省的无参数构造函数
A(const A &a); // 缺省的拷贝构造函数
~A(void); // 缺省的析构函数
A & operate =(const A &a); // 缺省的赋值函数
默认构造函数与默认析构函数仅负责对象的创建和销毁,不做对象的初始化和资源的清理。
C++中通过构造函数确保对象的初始化,如果类存在构造函数,编译器会在创建对象的时候自动调用该函数。
构造函数特征:
- 与类同名
- 没有返回值(与析构函数一致)
- 构造函数可以被重载,由实参决定调用哪个构造函数

class A
{
public:
int i,j; A(): i(), j() {}; //构造函数一:使用构造函数初始化列表
A(int iI, int iJ); //构造函数二:使用参数赋值
}; A::A(int iI, int iJ) {
i = iI;
j = iJ;
}

构造函数一使用初始化列表对数据成员进行初始化,这在某些情况下是唯一选择:
对类中const和引用类型对象的初始化,只能使用初始化列表,不能赋值操作

class A
{
public:
A(int ii);
private:
int i;
const int ci;
int &ri;
}; A::A(int ii)
{
i = ii; //ok
ci = ii; //const对象不可以赋值
ri = i; //赋值给ri但对象未绑定
} //正确写法如下:
A::A(int ii) : i(ii), ci(i), ri(ii){}

默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式就会使用默认构造函数。
2.拷贝构造函数
特征:
- 只有单个形参,形参为对本类类型对象的引用(用const修饰)
(1)如果没有定义拷贝构造函数,编译器会合成拷贝构造函数
函数行为是逐个成员进行初始化,然后将新对象初始化为原对象的副本。数组成员是例外,合成拷贝构造函数会拷贝整个数组。
(2)自定义拷贝构造函数
A(const A&);
大多数类应定义拷贝构造函数和默认构造函数。
(3)禁止拷贝
如果一个类需要禁止赋值,并需显式地声明拷贝构造函数为private,这样就不允许用户代码对该类类型的对象进行复制。
但类的友元和成员仍然可以进行复制,也需要禁止的话,就需要声明一个拷贝构造函数为private且对它不进行定义。
<转载>构造函数与拷贝构造函数的更多相关文章
- C++中的构造函数,拷贝构造函数,赋值函数
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...
- 类string的构造函数、拷贝构造函数和析构函数
原文:http://www.cnblogs.com/Laokong-ServiceStation/archive/2011/04/19/2020402.html 类string的构造函数.拷贝构造 ...
- c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
题目: 为下面的Rectangle类实现构造函数,拷贝构造函数,赋值操作符,析构函数. class Shape { int no; }; class Point { int x; int y; }; ...
- C++中的构造函数,拷贝构造函数和赋值运算
关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇<高质量C++/C编程指南>的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章. 常见的给对象赋 ...
- 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数
一.题目: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &othe ...
- CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数
类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 // person.h #ifndef _PERSON_H_ #define _PERSON_H_ class Person{ public : ...
- C++中构造函数,拷贝构造函数和赋值函数的区别和实现
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...
- C++ 构造函数_拷贝构造函数
拷贝构造函数
- C++构造函数和拷贝构造函数详解
构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含 ...
- C++ 构造函数、拷贝构造函数、赋值运算符
<C++ Primer Plus> 12.1 动态内存和类 12.1.1 复习示例和静态类成员 不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存 如果在头文 ...
随机推荐
- Struts分页
1.分页的bean类PaginationSupport.java 2.写好后直接在action里面调用,计算当前页显示的数据 3.写一个公用的jsp页面,直接在需要分页的页面include就可以了 ...
- 优化移动体验的HTML5技巧
简介 连轴转的刷新,不断变向的页面转换,以及tap事件的周期性的延迟仅仅是现在移动web环境令人头疼事情的一小部分.开发者正试图尽可能的靠近原生应用,但却经常被各种兼容问题,系统复位,和僵化的框架打乱 ...
- swift 模式
原文:http://www.cocoachina.com/newbie/basic/2014/0612/8800.html 模式(pattern)代表了单个值或者复合值的结构.比如,元组(1, 2)的 ...
- 初学者学Java设计模式(一)------单例设计模式
单例设计模式 单例设计模式是指一个类只会生成一个对象,优点是他可以确保所有对象都访问唯一实例. 具体实现代码如下: public class A { public static void main(S ...
- 开源 免费 java CMS - FreeCMS1.5-系统配置
下载地址:http://code.google.com/p/freecms/ 系统配置 从FreeCMS 1.2 开始支持 管理系统使用的配置项. 从左侧管理菜单点击系统配置进入. 从FreeCMS ...
- ARM指令集——数据处理指令
ARM汇编指令集 ARM汇编文件的组成 指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作 伪指令:在编译时替换成能被识别的ARM指令 伪操作:知道编译器进行编译, ...
- openssl 证书请求和自签名命令req详解
1.密钥.证书请求.证书概要说明 在证书申请签发过程中,客户端涉及到密钥.证书请求.证书这几个概念,初学者可能会搞不清楚三者的关系,网上有的根据后缀名来区分三者,更让人一头雾水.我们以申请证书的流程说 ...
- (转)深入理解 __doPostBack
在我的随笔<Page,你是怎样处理回发事件的?>中曾提出一个疑问,如何得到引起页面PostBack的控件?通过阅读Page类的源码,误打误撞,无意中看到了__EVENTTARGET和__E ...
- SQLServer 2008 R2 发布订阅配置指南
原以为配置SQLServer 2008 R2的发布订阅很简单,实际配置后才发现过程中有问题地方一直都没搞明白,最后经过几天的查找问题和实践,终于搞定了.现将过程记录如下. SQLServer 2008 ...
- unity 之2D游戏简单操作
unity 做2D项目也很方便. 首先要调整camera的模式,camera 的检视面板参数如下: perspective 模式就是平时用的 模式.摄像机到游戏物体是有角度的张开, 而 orthog ...