使用一个已经存在的对象(由拷贝构造函数的参数指定的对象)去初始化一个新的
同类的对象.如果程序员没有定义拷贝构造函数,系统就会自动生成一个默认的函数
,这个默认拷贝函数的功能是把初始值对象的每个成员的值都复制到新建立的对
象中。*/
#include<iostream.h>
class point
{
public:
point(int xx=0,int yy=0){X=xx;Y=yy;}/*构造函数的定义及实现*/
point(point &p);/*拷贝构造函数,问题1:根据拷贝构造函数的定义:使用一个已经存在的对象去初始化一个新的
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
int getX(){return X;}
int getY(){return Y;}
private:
int X,Y;
};
/*成员函数的实现*/
point::point(point &p)
{
X=p.X;
Y=p.Y;
cout<<"拷贝构造函数被调用"<<endl;
}
//行参为point类的对象的函数
void fun1(point s)
{
cout<<s.getX()<<endl;
}//问题2:此时为什么会调用?????是怎么实现调用的????
//返回值为point类对象函数
point fun2()
{
point A(1,2);
return A;
}
//主程序
void main()
{
point A(4,5);
point B(A);//情况一,用A初始化B
cout<<B.getX()<<endl;
fun1(B);//情况二,对像B作为fun1的实参。
B=fun2();//情况三函数的返回值为类对象,
cout<<B.getX()<<endl;
}
回答者只要写明问题一,二即可:)谢谢
5 个解决方案
#1
point(point &p);/*拷贝构造函数,问题1:根据拷贝构造函数的定义:使用一个已经存在的对象去初始化一个新的
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
---- 这里的p只是一个形参,没有实际内容的。
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
---- 这里的p只是一个形参,没有实际内容的。
#2
}//问题2:此时为什么会调用?????是怎么实现调用的????
//返回值为point类对象函数
--- 为什么不能被调用?
你在main()里不是有调用的语句吗?
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()
//返回值为point类对象函数
--- 为什么不能被调用?
你在main()里不是有调用的语句吗?
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()
#3
point(point &p);/*拷贝构造函数,问题1:根据拷贝构造函数的定义:使用一个已经存在的对象去初始化一个新的
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
--- 用什么来传给这个函数的形参p?不就是用已经存在的point对象来传的吗?
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
--- 用什么来传给这个函数的形参p?不就是用已经存在的point对象来传的吗?
#4
第一个问题,p是一个形参,它是实参的一个引用,所以作为实参的对象必须已经存在的。
第二个问题,函数void fun1(point s);采用的是值传递,当调用fun1(B);时,会自动的去调用拷贝构造函数,利用对象B来生成fun1()函数中的对象s。
第二个问题,函数void fun1(point s);采用的是值传递,当调用fun1(B);时,会自动的去调用拷贝构造函数,利用对象B来生成fun1()函数中的对象s。
#5
point(point &p);/*拷贝构造函数,问题1:根据拷贝构造函数的定义:使用一个已经存在的对象去初始化一个新的
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
回答:首先这是一种函数的说明,P只是一个形参而己!己经存在的含义你的理解有误,这里的所谓己经存在不一定要有具体的值或者说具体的说明,它可以是一种简简单单的说明说行了!
例如:
point a;
point q(a);
这里就调用了拷贝构造函数.用了a来初始化q;难道你能说是用p来初始化了q吗?
拷贝构造函数的实现你的理解不对!
问题2:此时为什么会调用?????是怎么实现调用的????
fun1(B);这个语句就调用了函数!我认为这里仅仅是一种值传而己,
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
回答:首先这是一种函数的说明,P只是一个形参而己!己经存在的含义你的理解有误,这里的所谓己经存在不一定要有具体的值或者说具体的说明,它可以是一种简简单单的说明说行了!
例如:
point a;
point q(a);
这里就调用了拷贝构造函数.用了a来初始化q;难道你能说是用p来初始化了q吗?
拷贝构造函数的实现你的理解不对!
问题2:此时为什么会调用?????是怎么实现调用的????
fun1(B);这个语句就调用了函数!我认为这里仅仅是一种值传而己,
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()
#1
point(point &p);/*拷贝构造函数,问题1:根据拷贝构造函数的定义:使用一个已经存在的对象去初始化一个新的
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
---- 这里的p只是一个形参,没有实际内容的。
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
---- 这里的p只是一个形参,没有实际内容的。
#2
}//问题2:此时为什么会调用?????是怎么实现调用的????
//返回值为point类对象函数
--- 为什么不能被调用?
你在main()里不是有调用的语句吗?
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()
//返回值为point类对象函数
--- 为什么不能被调用?
你在main()里不是有调用的语句吗?
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()
#3
point(point &p);/*拷贝构造函数,问题1:根据拷贝构造函数的定义:使用一个已经存在的对象去初始化一个新的
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
--- 用什么来传给这个函数的形参p?不就是用已经存在的point对象来传的吗?
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
--- 用什么来传给这个函数的形参p?不就是用已经存在的point对象来传的吗?
#4
第一个问题,p是一个形参,它是实参的一个引用,所以作为实参的对象必须已经存在的。
第二个问题,函数void fun1(point s);采用的是值传递,当调用fun1(B);时,会自动的去调用拷贝构造函数,利用对象B来生成fun1()函数中的对象s。
第二个问题,函数void fun1(point s);采用的是值传递,当调用fun1(B);时,会自动的去调用拷贝构造函数,利用对象B来生成fun1()函数中的对象s。
#5
point(point &p);/*拷贝构造函数,问题1:根据拷贝构造函数的定义:使用一个已经存在的对象去初始化一个新的
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
回答:首先这是一种函数的说明,P只是一个形参而己!己经存在的含义你的理解有误,这里的所谓己经存在不一定要有具体的值或者说具体的说明,它可以是一种简简单单的说明说行了!
例如:
point a;
point q(a);
这里就调用了拷贝构造函数.用了a来初始化q;难道你能说是用p来初始化了q吗?
拷贝构造函数的实现你的理解不对!
问题2:此时为什么会调用?????是怎么实现调用的????
fun1(B);这个语句就调用了函数!我认为这里仅仅是一种值传而己,
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()
同类的对象。也就是说p是已经存在的对象,但P在这里可是第一次出现?怎么说是“已经存在”???????????*/
回答:首先这是一种函数的说明,P只是一个形参而己!己经存在的含义你的理解有误,这里的所谓己经存在不一定要有具体的值或者说具体的说明,它可以是一种简简单单的说明说行了!
例如:
point a;
point q(a);
这里就调用了拷贝构造函数.用了a来初始化q;难道你能说是用p来初始化了q吗?
拷贝构造函数的实现你的理解不对!
问题2:此时为什么会调用?????是怎么实现调用的????
fun1(B);这个语句就调用了函数!我认为这里仅仅是一种值传而己,
fun1(B):就是将B传给fun1(point s)的形参s,然后执行s.getX()其实是调用B.getX()