zoukankan      html  css  js  c++  java
  • C++中创建对象的时候加括号和不加括号的区别

    c++创建对象的语法有

    1. 在栈上创建 MyClass a;

    2. 在堆上创建加括号 MyClass *a= new MyClass();

    3. 在堆上创建不加括号 MyClass *a = new MyClass;

    4. MyClass a();声明了一个返回值为MyClass类型的无参函数。

    注: 第4条不会实例化一个对像,只是一个函数的声明,一定要注意区分啊。

    代码验证:

    #include <iostream>
    class MyClass
    {
    public:
        MyClass() 
    	{ 
    		std::cout << "Hello MyClass!" << std::endl; 
    	}
    	MyClass(int i):num(i)
    	{
    		std::cout << "Hello MyClass!------int" << std::endl; 
    	}
     
        void MyMethod() 
    	{ 
    		std::cout << "输出成员num: " <<num << std::endl; 
    	}
     
    private:
    	int num;
    };
    int main()
    {
    	//对于调用构造函数
    	MyClass c1;//表示使用不带参数的构造函数,或者有默认参数值的构造函数。
    	
    	MyClass c2();//不会调用无参构造函数,各种情况下该处是声明一个返回值为MyClass类型的函数而已
    	
    	MyClass c3(1);//调用参数为int的构造函数
    	
    	/*
    	对于new关键字加括号和不加括号的区别---
    	1.对于自定义类型来说没有区别,都是使用默认构造函数
    	2.对于内置类型来说加括号会初始化
    	*/
    	std::cout<<std::endl;
    	MyClass *c4 = new MyClass();
    	c4->MyMethod();
    	MyClass *c5 = new MyClass(1);
    	c5->MyMethod();
    	MyClass *c6 = new MyClass;
    	c6->MyMethod();
     
    	//内置类型
    	std::cout<<std::endl;
    	int *pint1 = new int(1);
    	int *pint2 = new int();
    	int *pint3 = new int;
     
    	std::cout<<*pint1<<" "<<*pint2<<" "<<*pint3<<std::endl;
    	return 0;
    }
    

    输出如下:
    在这里插入图片描述

    结论

    new 关键字创建对象时 对于内置类型:加括号会初始化,不加括号不初始化;对于自定义类型,都会调用默认构造函数,加不加括号没区别。

  • 相关阅读:
    [APM] OneAPM 云监控部署与试用体验
    Elastic Stack 安装
    xBIM 综合使用案例与 ASP.NET MVC 集成(一)
    JQuery DataTables Selected Row
    力导向图Demo
    WPF ViewModelLocator
    Syncfusion SfDataGrid 导出Excel
    HTML Table to Json
    .net core 2.0 虚拟目录下载 Android Apk 等文件
    在BootStrap的modal中使用Select2
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537556.html
Copyright © 2011-2022 走看看