• 两个特别的构造函数


    -无参构造函数

     没有参数的构造函数:

     当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空;

    -拷贝构造函数

     参数为const class_name & 的构造函数 (当前类对象的引用):

      当类中没有定义拷贝构造函数,编译器默认提供一个拷贝构造函数,简单的进行成员变量的复制。

    实例一:

     1 #include <stdio.h>
     2 
     3 class Test
     4 {
     5 private:
     6     int i;
     7     int j;
     8 public:
     9     int getI()
    10     {
    11         return i;
    12     }
    13     int getJ()
    14     {
    15         return j;
    16     }
    17     /*Test(const Test& t)
    18     {
    19         i = t.i;
    20         j = t.j;
    21     }
    22     Test()
    23     {
    24     }*/
    25 };
    26 
    27 int main()
    28 {
    29     Test t1;
    30     Test t2 = t1;
    31     
    32     printf("t1.i = %d, t1.j = %d
    ", t1.getI(), t1.getJ());
    33     printf("t2.i = %d, t2.j = %d
    ", t2.getI(), t2.getJ());
    34     
    35     return 0;
    36 }

    拷贝构造函数意义:

    1.兼容C语言的初始化方式;

    2.初始化行为能够符合预期的逻辑;

    浅拷贝:

    拷贝后对象的物理状态相同;

    深拷贝:

    拷贝后对象的逻辑状态相同。

    编译器提供的拷贝函数只进行浅拷贝。(简单的复制工作)
     
     1 #include <stdio.h>
     2 
     3 class Test
     4 {
     5 private:
     6     int i;
     7     int j;
     8     int* p;
     9 public:
    10     int getI()
    11     {
    12         return i;
    13     }
    14     int getJ()
    15     {
    16         return j;
    17     }
    18     int* getP()
    19     {
    20         return p;
    21     }
    22     Test(const Test& t)
    23     {
    24         i = t.i;
    25         j = t.j;
    26         p = new int;
    27         
    28         *p = *t.p;
    29     }
    30     Test(int v)
    31     {
    32         i = 1;
    33         j = 2;
    34         p = new int;
    35         
    36         *p = v;
    37     }
    38     void free()
    39     {
    40         delete p;
    41     }
    42 };
    43 
    44 int main()
    45 {
    46     Test t1(3);
    47     Test t2(t1);
    48     
    49     printf("t1.i = %d, t1.j = %d, *t1.p = %d
    ", t1.getI(), t1.getJ(), *t1.getP());
    50     printf("t2.i = %d, t2.j = %d, *t2.p = %d
    ", t2.getI(), t2.getJ(), *t2.getP());
    51     
    52     t1.free();
    53     t2.free();
    54     
    55     return 0;
    56 }

     

  • 相关阅读:
    剑指17.树的子结构
    剑指16.合并两个排序的链表
    剑指15.反转链表
    剑指14.链表中倒数第k个结点
    剑指13.调整数组顺序使奇数位于偶数前面
    剑指12.数值的整数次方
    剑指11.二进制中1的个数
    剑指10.矩形覆盖
    剑指09.变态跳台阶
    JS 中动态创建json,动态为json添加属性、属性值
  • 原文地址:https://www.cnblogs.com/lemaden/p/10107566.html
Copyright © 2020-2023  润新知