C++对象的初始化

今天看了一个视频教程,发现竟然没发编译出错,请问一下是否也是类的对象的初始化,例:classA{public:A(POINTp);~a();}在main函数中是这样初始化... 今天看了一个视频教程,发现竟然没发编译出错,请问一下是否也是类的对象的初始化,例:
class A
{
public:
A(POINT p);
~a();
}
在main函数中是这样初始化对象的:
A a(pa);
请问这和A a=pa;一样吗,他竟然没有编译出错!
展开
 我来答
黄邦勇帅哥哥
推荐于2017-11-23 · TA获得超过3987个赞
知道大有可为答主
回答量:1199
采纳率:100%
帮助的人:486万
展开全部
A a=pa;A a(pa);
先声明一下,在初始化对象的时候,最好不要写成A a(p)这样的形式,这样的形式有可能会出错,因为在C++中定义函数的形式就是int a(形参);可以看到这两种形式是一样的,如果p不是一个类的对象,而是一个内置类型的话就会被编译器认为是在声明一个函数,但是这个函数的形参是不正确的,因此会报错,所以在初始化对象时,最好使用A a=A(pa)这样的与A a(pa)等值的语句。
这两个语句都是属于复制初始化类型,会调用C++默认的复制构造函数初始化对象a,并不是楼上所说的什么赋值不赋值,这是初始化问题。其区别在于A a=pa;有可能会创建一个临时对象有可能不会创建(取决于编译器)。而A a(pa)会创建一个临时对象。如果创建了临时对象就会多调用一次析构函数,自已可以测试。
什么叫复制初始化和直接初始化,以及什么时候会产生临时对象什么时候不会产生临时对象,请去本人的文库下载文章《C++构造函数,复制构造函数和析构函数专题》里面有非常详细和全面的讲述,会对你有帮助。
风若远去何人留
推荐于2016-01-20 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
在C++中,当一个新对象被创建时,会有初始化操作。这与赋值是不同的,赋值是修改一个已经存在的对象的值。
初始化操作由构造函数完成。
假定类名为A,A的一个对象的初始化有如下几种形式:
1 A var;
2 A var = xxxx;
3 A var(init_list);
4 A var = {init_list};
其中,1会调用无参构造。2会调用赋值符号=后面对应类型的构造函数。而3和4都是根据初始化参数列表,调用对应的构造函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wdd_19881214
2010-04-06
知道答主
回答量:28
采纳率:0%
帮助的人:25.4万
展开全部
A(POINT p)是通过传参数对对象进行初始化的,而A a=pa;是通过赋值的方式进行初始化的,他们有异曲同工之妙,是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wy齐达内
2010-04-06
知道答主
回答量:26
采纳率:0%
帮助的人:28.7万
展开全部
恩,效果是一样的,只是用括号运行速度要快一点,程序小时是体现不出来的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chxy_niao
2010-04-09
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
一样的 前者创建对象a并对其赋初值pa ; 这个相当于一个带有参数的函数,而后者创建对象并将pa赋给对象a 两者意思一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式