C++创建类对象时(无参)后不加括号与加括号的区别

1、在栈中实例化对象

A a;//实例化对象,会调用class A中的构造函数
A b();//声明一个函数,没有传入的参数,返回值为A
假如A类有x成员,那么a.x正确,因为a为对象,但b.x错误,因为b为函数

2、在堆中实例化对象

a、没有定义构造函数(编译器自动生成构造函数)


int *a = new int;//不会将申请到的int空间初始化
int *a = new int();//则会将申请到的int空间初始化为0。

例子

#include<iostream>
using namespace std;

class A
{

public:
	int x;
public:
	void prin()
	{
		cout << x << endl;
	}
};

int main()
{

	A* a = new A;
	cout<<a->x<<endl;    //-842150451

	A* b = new A();
	cout<<b->x << endl;   //0
	system("pause");
	return 0;
}

b、自己定义了构造函数

//自己实现了构造函数,下面两种方式完全一样,都会调用构造函数
A* p_a=new A;
A* p_a=new A();
posted @ 2020-02-13 10:31  iucbjb  阅读(197)  评论(0)    收藏  举报