请看测试代码:

#include <iostream>
using namespace std; // 空类
class empty
{
}; // 一个默认构造函数,一个自定义构造函数
class Base
{
public:
Base()
{
cout << " default Base construct " << endl;
m_nValue = ;
};
Base(int nValue)
{
cout << " custom Base construct " << endl;
m_nValue = nValue;
}; private:
int m_nValue;
}; // 一个复合默认构造函数
class custom
{
public:
custom(int value = )
{
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(); 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
*/

1、加括号和不加括号的区别

  (1)加括号

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

    b、若括号非空,即有实参项,可以理解为调用重载构造函数,或复合默认构造函数(形式参数均为默认值)

  (2)不加括号

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

2、默认构造函数与复合默认构造函数的区别

  (1)默认构造函数

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

  (2)复合默认构造函数

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

两者联系:

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

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

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

  转自:http://www.cnblogs.com/Braveliu/p/4263145.html

【转】new对象时,类名后加括号和不加括号的区别的更多相关文章

  1. JS声明对象时属性名加引号与不加引号的问题

    般情况下属性名加引号和不加引号是都可以的,效果是一样的. var obj = { name : '你好', 'age' : 1, }; document.write( obj['name'] + '& ...

  2. Python调用函数加括号和不加括号的区别

    Python调用函数加括号和不加括号的区别 # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/7/3 10:03 # @Desc ...

  3. C++中创建对象的时候加括号和不加括号的区别

    c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...

  4. 函数基础重点掌握内容:创建函数、return返回单个值、return返回多个值、函数名加括号与不加括号的区别

    ##比较两个数大小 #有参函数!!! def compare(s,t): if s > t: print(s) else: print(t) f=compare compare(1000,30) ...

  5. C++中创建对象的时候加括号和不加括号的区别(转)

    c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...

  6. Java中主类中定义方法加static和不加static的区别

     Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...

  7. onclick时间加return和不加return的区别

    JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...

  8. js中加“var”和不加“var”的区别

    JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill&q ...

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

    [1]默认构造函数 关于默认构造函数,请参见随笔<类中函数> 请看测试代码: 1 #include <iostream> 2 using namespace std; 3 4 ...

随机推荐

  1. python2和python3的主要区别

    作为一个py3土著,并不是很关心这个问题,但是总有人隔三差五问这个问题,还是捋了一下. 这里列出几个主要区别: 1.最常见的人尽皆知的print()函数 在py2中,print是一个语句,不带括号,也 ...

  2. Java -- JDBC 学习--使用 DBUtils

    Apache—DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdb ...

  3. SDL_BlitSurface

    SDL_BlitSurface Use this function to perform a fast surface copy to a destination surface. Contents ...

  4. git 子模块

    为了方便各个子模块独立开发,或使用第三方不断更新的仓库,可以使用子模块来引用. 子模块对应的源码是子模块仓库的克隆. git submodule 与 subtree对比 git submodule 允 ...

  5. MATLAB运行edge函数闪退

    出现这种问题时,先检查代码有没有问题,换一张图片是不是也有闪退情况. 如果以上都检查过没问题,还是有闪退现象,那就检查MATLAB的版本是不是太低了,比如r2010a版本运行edge函数时,就经常出现 ...

  6. 二叉查找树(BST)、平衡二叉树(AVL树)

    二叉查找树(BST) 特殊的二叉树,又称为排序二叉树.二叉搜索树.二叉排序树. 二叉查找树实际上是数据域有序的二叉树,即对树上的每个结点,都满足其左子树上所有结点的数据域均小于或等于根结点的数据域,右 ...

  7. Redis 安全配置

    1.禁止一些高危命令 修改 redis.conf 文件,添加 rename-command FLUSHALL "" rename-command FLUSHDB "&qu ...

  8. Python基础【day02】:字符编码(一)

    本节内容 1.字符编码与转码 1.关于中文2.注释3.转码 2.表达式for 循环 3.数据类型之数字 1.数字2.布尔值3.字符串4.列表5.元祖6.字典 一.字符编码与转码 python解释器在加 ...

  9. 匿名内部类中使用的外部局部变量为什么只能是final变量

    被匿名内部类引用的变量会被拷贝一份到内部类的环境中 但其后,在外部,该变量如果被修改,则内部外部不一致 Java为了避免数据不同步的问题,做出了匿名内部类只可以访问final的局部变量的限制. 究其原 ...

  10. C# 实现线段的编码裁剪算法(vs2010)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...