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

    new对象时,类名后加括号与不加括号的区别

    #include <iostream>
    using namespace std;
     
    // 空类
    class empty
    {
    };
     
    // 一个默认构造函数,一个自定义构造函数
    class Base
    {
    public:
        Base() 
        { 
            cout << " default Base construct " << endl;
            m_nValue = 100; 
        };
        Base(int nValue) 
        { 
            cout << " custom Base construct " << endl;
            m_nValue = nValue; 
        };
     
    private:
        int m_nValue;
    };
     
    // 一个复合默认构造函数
    class custom
    {
    public:
        custom(int value = 100)
        { 
            cout << " default && custom construct " << endl;
            m_nValue = value; 
        }
     
    private:
        int m_nValue;
    };
     
    void main()
    {
        empty* pEmpty1 = new empty;
        empty* pEmpty2 = new empty();
     
        Base* pBase1 =  new Base;
        Base* pBase2 = new Base();
        Base* pBase3 = new Base(200);
     
        custom* pCustom1 = new custom;
        custom* pCustom2 = new custom();
     
        delete pEmpty1;
        delete pEmpty2;
     
        delete pBase1;
        delete pBase2;
        delete pBase3;
     
        delete pCustom1;
        delete pCustom2;
    }
    // Result:
    /*
    default Base construct
    default Base construct
    custom Base construct
    default && custom construct
    default && custom construct
    */

    至此足以。

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

      (1)加括号

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

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

      (2)不加括号

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

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

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

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

    两者联系:

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

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

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

    来源:

    new对象时,类名后加括号与不加括号的区别

  • 相关阅读:
    被问到 Kafka,不要再说你不会了
    掌握Prometheus 监控思科交换机技能,这篇文章就够了!
    如何优雅的搞垮服务器,再优雅的救活
    Prometheus 监控思科交换机---Alertmanager 邮件报警展示报警
    处理一次k8s、calico无法分配podIP的心路历程
    被问到 Kafka,不要再说你不会了
    无休止?谷歌和甲骨文的十年版权纠纷案新进展
    搜狗开源 srpc:自研高性能通用 RPC 框架
    程序员进阶系列:你真的懂 HelloWorld 吗?
    GitHub 推出 Codespaces Beta
  • 原文地址:https://www.cnblogs.com/2018shawn/p/11471226.html
Copyright © 2011-2022 走看看