在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;
} 展开
#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;
} 展开
展开全部
//你搞错了。
//下面的例子供你参考。
#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;
}
//下面的例子供你参考。
#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;
}
展开全部
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){}????//?类的成员变量必须在构造函数
??????????????????????????//?初始化列表或者函数中初始化
};
{?
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){}????//?类的成员变量必须在构造函数
??????????????????????????//?初始化列表或者函数中初始化
};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
忘了,最好看下说明
追问
?我看着书上说的赋值给同一类型的对象(如上这种情况),会调用拷贝构造函数,然后匿名对象被析构,但我调试的时候,匿名对象直接被析构了。没有调用拷贝构造函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询