zoukankan      html  css  js  c++  java
  • <转载>构造函数与拷贝构造函数

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

    1. 构造函数

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

    对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如:

    1 A(void); // 缺省的无参数构造函数
    2 A(const A &a); // 缺省的拷贝构造函数
    3 ~A(void); // 缺省的析构函数
    4 A & operate =(const A &a); // 缺省的赋值函数

    默认构造函数与默认析构函数仅负责对象的创建和销毁,不做对象的初始化和资源的清理。

    C++中通过构造函数确保对象的初始化,如果类存在构造函数,编译器会在创建对象的时候自动调用该函数。

    构造函数特征:

    • 与类同名
    • 没有返回值(与析构函数一致)
    • 构造函数可以被重载,由实参决定调用哪个构造函数
    复制代码
     1 class A
     2 {
     3       public:
     4           int i,j;
     5           
     6           A(): i(0), j(0) {}; //构造函数一:使用构造函数初始化列表
     7           A(int iI, int iJ); //构造函数二:使用参数赋值
     8 };
     9  
    10 A::A(int iI, int iJ) {
    11       i = iI;
    12       j = iJ;
    13 }
    复制代码

    构造函数一使用初始化列表对数据成员进行初始化,这在某些情况下是唯一选择:

    对类中const和引用类型对象的初始化,只能使用初始化列表,不能赋值操作

    复制代码
     1 class A
     2 {
     3     public:
     4         A(int ii);
     5     private:
     6         int i;
     7         const int ci;
     8         int &ri;
     9 };
    10 
    11 A::A(int ii)
    12 {
    13     i = ii;   //ok
    14     ci = ii; //const对象不可以赋值
    15     ri = i;  //赋值给ri但对象未绑定
    16 }
    17 
    18 //正确写法如下:
    19 A::A(int ii) : i(ii), ci(i), ri(ii){}
    复制代码

    默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式就会使用默认构造函数。

         2.拷贝构造函数

         特征:

    • 只有单个形参,形参为对本类类型对象的引用(用const修饰)  

         (1)如果没有定义拷贝构造函数,编译器会合成拷贝构造函数

          函数行为是逐个成员进行初始化,然后将新对象初始化为原对象的副本。数组成员是例外,合成拷贝构造函数会拷贝整个数组。

          (2)自定义拷贝构造函数

           A(const A&);

          大多数类应定义拷贝构造函数和默认构造函数。

         (3)禁止拷贝

          如果一个类需要禁止赋值,并需显式地声明拷贝构造函数为private,这样就不允许用户代码对该类类型的对象进行复制。

         但类的友元和成员仍然可以进行复制,也需要禁止的话,就需要声明一个拷贝构造函数为private且对它不进行定义。

  • 相关阅读:
    禁止用户选中页面
    冒泡排序
    hadoop-1.2.1安装配置
    CentOS碰到两个问题,顺便解决了下
    CentOS 安装
    VM配置一个待安装LUNIX系统的环境
    CentOS下IP的配置
    C++ Win系统下的调试
    题解 P1781 【宇宙总统】
    题解 P2089 【烤鸡】
  • 原文地址:https://www.cnblogs.com/ztteng/p/3283842.html
Copyright © 2011-2022 走看看