中易网

关于c++的拷贝函数的问题:怎样把用默认构造函数初始化的对象c1通过拷贝构造函数初始化c3.

答案:2  悬赏:80  
解决时间 2021-03-12 20:44
#include"iostream"
#include"cstdlib"
using namespace std;
class Complex
{
private:
double real,image;
public:
Complex()
{
real=20;
image=40;
};
Complex(double a,double b)
{
real=a;
image=b;
};
Complex(Complex &d);
void display()
{
if(image>=0)
{cout< if(image<0)
{cout< }
};
int main()
{
Complex c1();
Complex c2(0,0);
Complex c3(c1); //cannot convert parameter 1 from 'class Complex (void)' to 'class Complex &'
cout<<"c1的内容:"< c1.display();
cout<<"c2的内容:"< c2.display();
cout<<"c3的内容:"< c3.display();
return 0;
}
Complex::Complex(Complex &d)
{
real=d.real;
image=d.image;
}
最佳答案
你程序编译不过的地方是c1的定义,修改如下即可:
int main()
{
Complex c1;// ();
Complex c2(0, 0);
Complex c3(c1);  //cannot convert parameter 1 from 'class Complex (void)' to 'class Complex &'
cout << "c1的内容:" << endl;
c1.display();
cout << "c2的内容:" << endl;
c2.display();
cout << "c3的内容:" << endl;
c3.display();
return 0;
}c++编译器解释代码时时优先解释为函数的,你的那种写法,它将c1当做是一个函数,你那句被当做了一个函数声明。直接Complex c1;它就已经是调用了默认构造函数的。

其实你如果想调用拷贝构造函数,下面的语句就可以:
Complex c3 = c1;对于这里为什么是调用拷贝构造函数而不是赋值操作符,我个人理解是,变量第一次出现的时候,都是构造。
全部回答
拷贝构造函数是构造函数的一种啊,并不存在冲突,它们的包含和被包含的关系。至于拷贝构造函数的用途,是在你产生临时对象,或者在复杂的复制语句当中的时候,代码会自动调用该函数,产生出一个对象供后面代码复制使用的。你没有的话,那么产生这个临时对象的时候就会出错,当然,你的代码只要不产生临时对象,拷贝构造函数要不要都无所谓了。并且,如果你的代码没有显示的添加构造函数,编译器会自动帮你生成一个默认的构造函数,一个拷贝构造函数和一个析构函数的。但是这些都是浅拷贝,遇到指针数据成员,就有出错的潜在危险了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
动物园有3只大猴,13只小猴,要添上几只小猴后,
宴和饺子手擀面NO.99地址有知道的么?有点事
食尚街怎么去啊,有知道地址的么
诺亚传说几级拜师
区教育局和招生办有业务往来吗
法国精纺哔叽英文怎么写
亚马逊探险乐园怎么去啊,有知道地址的么
中国地质大学体测不及格怎么办
梦见有人追我和孩子我拼命逃
御足乐沐足阁地址有知道的么?有点事想过去
乞丐和美女广场午的背景音乐是什么歌名
苏州北到常熟梅李多少公里
天天户外在哪里啊,我有事要去这个地方
两个显卡,怎么区分电脑哪个是独显哪个是集显
以“三”开头的成语有哪些?
推荐资讯
上海易恒进出口有限公司这个地址在什么地方,
通达汽车电子在什么地方啊,我要过去处理事情
优美甜缘·美SPA瑜伽会所旗舰店地址在什么地
锁喉流的瓦莉拉怎么玩啊,不会玩一直给人吊
如何使用墙贴
ibm t43内存条在哪
雷家洼村这个地址在什么地方,我要处理点事
选择题第一题是对的吗?最后一题是什么?判断
物权法颁布后是否仍然允许行政强迁?
3D组三买七码直选多少钱
买了华为手机,在华为应用市场有什么福利
男的为什么发「拥抱」表情给女的?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?