在c++中,匿名对象的问题,代码如下:在注释的地方为什么?

#include<iostream>#include<cstring>usingnamespacestd;classLocation{public:Location(in... #include<iostream>
#include<cstring>
using namespace std;
class Location
{public:
Location(int a,int b)
{
this->x=a;
this->y=b;
cout<<"有参构造函数"<<endl;
}
Location(const Location &obj)
{
this->x=obj.x;
this->y=obj.y;
cout<<"拷贝构造函数"<<endl;
}
int Getx()
{ return this->x;
}
int Gety()
{return this->y;
}
~Location()
{
cout<<"析构函数"<<endl;
}
private:
int x;
int y;
};
Location g()
{ Location A(3,5);
return A;
}
void objplay()
{Location B(4,6);
B=g(); //这里应该调用拷贝构造函数,但为什么我调试的时候没有调用拷贝构造函数?
}
int main()
{ objplay();
return 0;
}
展开
 我来答
microroom
科技发烧友

2019-02-20 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1523万
展开全部
//你搞错了。
//下面的例子供你参考。
#include<iostream>

using namespace std;

class Location
{
public:
Location(int a,int b)
{
this->x=a;
this->y=b;
cout<<"有参构造函数"<<endl;
}
Location(const Location &obj)
{
this->x=obj.x;
this->y=obj.y;
cout<<"拷贝构造函数"<<endl;
}
int Getx()
{
return this->x;
}
int Gety()
{
return this->y;
}
~Location()
{
cout<<"析构函数"<<endl;
}
private:
int x;
int y;
};
Location g()
{
Location A(3,5);
return A;
}
void objplay()
{
Location B(4,6);
B=g(); //这里调用的是=号运算符重载的默认实现(浅拷贝)
Location B2(B); //这里调用的才是拷贝构造函数
}
int main()
{
objplay();
return 0;
}
万慕山r0
2019-02-19 · TA获得超过463个赞
知道小有建树答主
回答量:471
采纳率:100%
帮助的人:51万
展开全部
class?B?
{?
A?aa();//这个地方!!这一行这样写运行没有错误??
???????????????//如果这一行换成A?aa(6);运行有错误,为什么呀??
};?
A?aa();//?因为编译器把它当成了一个函数了?函数名为aa,返回值类型为A;
//如果这一行换成A?aa(6);运行有错误,为什么呀??
同样被当成函数了,A为返回值类型,aa为函数名,参数表你给一个常数6当然报错啦。
正确的方法是class?B?
{?
A?aa;
public:
????B(){}
????B(int?a)?:?aa(a){}????//?类的成员变量必须在构造函数
??????????????????????????//?初始化列表或者函数中初始化
};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花虽落风筑沉香
2019-02-19 · 贡献了超过127个回答
知道答主
回答量:127
采纳率:14%
帮助的人:9万
展开全部
忘了,最好看下说明
追问
?我看着书上说的赋值给同一类型的对象(如上这种情况),会调用拷贝构造函数,然后匿名对象被析构,但我调试的时候,匿名对象直接被析构了。没有调用拷贝构造函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式