原文地址http://www.cnblogs.com/waynelu/archive/2012/07/01/2572264.html

  1. 构造函数

构造函数、析构函数与赋值函数是每个类最基本的函数。

对于任意一个类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且对它不进行定义。

<转载>构造函数与拷贝构造函数的更多相关文章

  1. C++中的构造函数,拷贝构造函数,赋值函数

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  2. 类string的构造函数、拷贝构造函数和析构函数

    原文:http://www.cnblogs.com/Laokong-ServiceStation/archive/2011/04/19/2020402.html   类string的构造函数.拷贝构造 ...

  3. c++ 构造函数,拷贝构造函数,析构函数与赋值操作符

    题目: 为下面的Rectangle类实现构造函数,拷贝构造函数,赋值操作符,析构函数. class Shape { int no; }; class Point { int x; int y; }; ...

  4. C++中的构造函数,拷贝构造函数和赋值运算

    关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇<高质量C++/C编程指南>的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章. 常见的给对象赋 ...

  5. 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数

    一.题目: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &othe ...

  6. CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数

    类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 // person.h #ifndef _PERSON_H_ #define _PERSON_H_ class Person{ public : ...

  7. C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  8. C++ 构造函数_拷贝构造函数

    拷贝构造函数

  9. C++构造函数和拷贝构造函数详解

    构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含 ...

  10. C++ 构造函数、拷贝构造函数、赋值运算符

    <C++ Primer Plus> 12.1 动态内存和类 12.1.1 复习示例和静态类成员 不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存 如果在头文 ...

随机推荐

  1. 一、mysql分表简单介绍

    一.Mysql分表的原因 1.当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了. 分表的目的就在于此,减小数据库的负担,缩短查询时间. 2.mysql中 ...

  2. android 银行卡。。空格输入

    class myWatcher implements TextWatcher { int beforeTextLength = 0; int onTextLength = 0; boolean isC ...

  3. javascript正則表達式 &quot;\b&quot;问题

    preface 昨晚在看<javascript权威指南>后.看见作者自己封装一个兼容全部浏览器的山寨HTML5新API classLIst类.自己想了想认为自己也要去玩一下.可是能力还是有 ...

  4. Linux环境下Eclipse + Tomcat + MySQL 配置J2EE开发环境的方法

    1. 版本号信息 (1)CentOS 6.4发行版64位,uname -a 显演示样例如以下: Linux localhost.localdomain 3.11.6 #1 SMP Sat Nov 2 ...

  5. LoadRunner录制回放脚本RecContentType=application/json报错

    今天做一个新项目,项目系统的框架是用SSH,特意查看了一下项目源码,用的ajax提交比较多,主要的问题是该系统对IE(8~10)浏览器都不兼容,无法进行录制. 是问题,总有解决的办法! 我本机为Loa ...

  6. HTML5 prefetch即预加载

    原文地址 声明:此文带着自己的理解,不完全按原文翻译 prefetch 即预加载,在用户需要前我们就将所需的资源加载完毕. 有了浏览器缓存,为何还需要预加载? 用户可能是第一次访问网站,此时还无缓存 ...

  7. Java数据输入

    以下是数据输入实例: //以下是数据输入实例 import java.util.Scanner;//导入java.util.Scanner,Scanner首字母大写 public class Test ...

  8. .net 开发定时执行的windows服务

    环境:win7+vs2010+Oracle11g+office2010(64位操作系统) 需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中 一.添加新建项目——win ...

  9. java的InputStream和InputStreamReader有什么区别??

    解释一: InputStream  此抽象类是表示字节输入流的所有类的超类 InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符.它使用 ...

  10. IFS解惑

    一.IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.完整定义是The shell uses the value stored in ...