C++中new一个类的指针,有何没有括号有什么区别?

classA{public:A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};~A(){cout<<"A的析构函数被执行"<<endl;};... class A
{
public:
A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};
~A(){cout<<"A的析构函数被执行"<<endl;};
virtual void x(){cout<<"a->x"<<endl;}
virtual void y(){cout<<"a->y"<<endl;}
virtual void z(){cout<<"a->z"<<endl;}
void get_value(){cout<<a<<b<<endl;}
private:
int a;
int b;
};
比如这是类A
A *a=new A(); 我现在new一个指向A的对象的指针,那么new A()和new A有什么区别呢?都能运行啊
展开
 我来答
风若远去何人留
2015-09-17 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450126
专业C/C++软件开发

向TA提问 私信TA
展开全部
括号分为两种,中括号[]或小括号()。
为方便说明,定义指针类型为class test, 指针为
test *ptest;

一、 中括号的情况。
中括号是用来标示申请的是一个对象,还是一组对象。
1 没有中括号时,即ptest = new test; 这时ptest得到的是一个对象*ptest, 释放时使用delete ptest;
2 带有中括号时,在中括号中需要有一个正整数参数。
ptest = new test[N];
N可以是变量,也可以是常量。
这时申请到的ptest指向的空间是N个连续的对象ptest[0],ptest[1]...ptest[N-1],即可以当做一个数组使用。
释放时需要调用delete [] ptest;

二、小括号的情况。
小括号是用来指定初始化参数,用于类指针时,就是指定调用哪个构造函数。
1 有小括号时,小括号中可以有若干参数,也可以没有参数。
比如
ptest = new test(); 这样在构造时就会调用无参构造test();
ptest = new test(1); 就会调用构造函数test(int),即一个整型参数的构造函数。

2 没有小括号时,默认调用无参构造。

ptest = new test;
和ptest = new test();是一样的。
百度网友9de5b9a
2014-09-24 · TA获得超过894个赞
知道小有建树答主
回答量:361
采纳率:0%
帮助的人:457万
展开全部
没有区别,new A()显式的调用构造函数,
new A隐式的调用构造函数,都是调用A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};

假如calss A还有一个构造函数
A(int i, int j):a(i),b(j){cout<<"A的构造函数2被执行"<<endl;};
那么new A(1,1)和new A就不一样了,调用的构造函数不一样,但是new A和new A()还是一样
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
简智峣
2014-09-24 · TA获得超过101个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:90万
展开全部
有括号可以初始化A类对象里面的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
喵嗷乌
2018-10-14
知道答主
回答量:1
采纳率:0%
帮助的人:815
展开全部
这是个梗表示程序猿找不到(对象)女朋友
同行会告诉你new(创建)一个对象下面这个对象在程序猿眼里其实就是一段程序或表格很残酷的嘲讽
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式