zoukankan      html  css  js  c++  java
  • new对象时,类名后加括号与不加括号的区别

    【1】默认构造函数

      关于默认构造函数,请参见随笔《类中函数

      请看测试代码:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 // 空类
     5 class empty
     6 {
     7 };
     8 
     9 // 一个默认构造函数,一个自定义构造函数
    10 class Base
    11 {
    12 public:
    13     Base() 
    14     { 
    15         cout << " default Base construct " << endl;
    16         m_nValue = 100; 
    17     };
    18     Base(int nValue) 
    19     { 
    20         cout << " custom Base construct " << endl;
    21         m_nValue = nValue; 
    22     };
    23 
    24 private:
    25     int m_nValue;
    26 };
    27 
    28 // 一个复合默认构造函数
    29 class custom
    30 {
    31 public:
    32     custom(int value = 100)
    33     { 
    34         cout << " default && custom construct " << endl;
    35         m_nValue = value; 
    36     }
    37 
    38 private:
    39     int m_nValue;
    40 };
    41 
    42 void main()
    43 {
    44     empty* pEmpty1 = new empty;
    45     empty* pEmpty2 = new empty();
    46 
    47     Base* pBase1 =  new Base;
    48     Base* pBase2 = new Base();
    49     Base* pBase3 = new Base(200);
    50 
    51     custom* pCustom1 = new custom;
    52     custom* pCustom2 = new custom();
    53 
    54     delete pEmpty1;
    55     delete pEmpty2;
    56 
    57     delete pBase1;
    58     delete pBase2;
    59     delete pBase3;
    60 
    61     delete pCustom1;
    62     delete pCustom2;
    63 }
    64 // Result:
    65 /*
    66 default Base construct
    67 default Base construct
    68 custom Base construct
    69 default && custom construct
    70 default && custom construct
    71 */

      至此足以。

    【2】加括号与不加的区别

      (1)加括号

        1. 若括号为空,即无实参项,那么理解为调用默认构造函数;

        2. 若括号非空,即有实参项,可以理解为调用重载构造函数,或复合默认构造函数。

      (2)不加括号

        调用默认构造函数,或复合默认构造函数。

    【3】默认构造函数 与 复合默认构造函数的区别

    默认构造函数:编译器会为每一个类默认提供一个构造函数,称之为默认构造函数。默认构造函数一般参数为空。

    复合默认构造函数:一个由用户自定义的所有形式参数都赋有默认值的构造函数,称之为复合默认构造函数。

    两者联系:

    一个类中,若一旦有一个用户自定义构造函数,那么由编译器提供的默认构造函数就不再存在。用户自定义的构造函数为默认构造函数的重载版。

    默认构造函数不复存在时,用户必须为这个类再自定义一个复合默认构造函数(选所有自定义构造函数其中之一,把形式参数均赋默认值即可)。

    不论自定义构造函数(即构造函数的重载版)有多少个,只允许有一个复合默认构造函数。

     

    Good  Good  Study,  Day  Day  Up.

    顺序 选择  循环  总结

     

  • 相关阅读:
    抽象方法真的不能实例化么?
    java中静态属性和和静态方法的继承问题 以及多态的实质
    Java中数据类型转换问题
    Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
    java的static块执行时机
    代理服务器:正向代理和反向代理
    阿里巴巴的一些面试题(无答案)
    pl/sql实现打印九九乘法表
    java中的标记接口(标签接口)
    spring boot中log4j冲突问题和解决办法
  • 原文地址:https://www.cnblogs.com/Braveliu/p/4263145.html
Copyright © 2011-2022 走看看