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();
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值