等号是不是调用了拷贝构造函数

Mynameiswuyihao 2009-01-31 11:04:26
#include "iostream.h"

class abc
{
public:
abc(int i,int j){x=i;y=j;}
abc(abc &R){x=R.x;y=R.y;}
void out(){cout<<x<<y<<endl;}
private:
int x,y;
};
int main()
{
abc m(1,2);
abc n=m;
m.out();
n.out();
return 0;
}


abc n=m;是不是调用了abc的构造函数,是不是c++这样规定的:声明对象时赋值就调用构造函数?
还有是不是不写函数的返回值,就默认为int?
...全文
197 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2009-01-31
  • 打赏
  • 举报
回复
你这不是赋值,定义类型时的=不是表示赋值,而是初始化,初始化调用拷贝构造
下面代码就调用operator=
abc m;
abc n=m;//这调用拷贝构造
n=m; //这是调用operator=

[Quote=引用楼主 Mynameiswuyihao 的帖子:]
C/C++ code#include "iostream.h"

class abc
{
public:
abc(int i,int j){x=i;y=j;}
abc(abc &R){x=R.x;y=R.y;}
void out(){cout<<x<<y<<endl;}
private:
int x,y;
};
int main()
{
abc m(1,2);
abc n=m;
m.out();
n.out();
return 0;
}



abc n=m;是不是调用了abc的构造函数,是不是c++这样规定的:声明对象时赋值就调用构造函数?
还有…
[/Quote]
TwilightAgain 2009-01-31
  • 打赏
  • 举报
回复
PS:C++里不写返回值默认返回int;
但是构造函数和析构函数没有返回值
TwilightAgain 2009-01-31
  • 打赏
  • 举报
回复
#include "iostream.h"

class abc
{
public:
abc(int i,int j){x=i;y=j;}
abc(abc &R){x=R.x;y=R.y;}
void out(){cout<<x<<y<<endl;}
private:
int x,y;
};
int main()
{
abc m(1,2);
abc n;
n=m;
m.out();
n.out();
return 0;
}

你这样写就不会调用拷贝构造函数,“=”只有在初始化时才调用拷贝构造函数(拷贝构造函数也是构造函数,只有当新变量被创建时才会被调用)
abc n=m ;和 abc n(m);等价
wuyu637 2009-01-31
  • 打赏
  • 举报
回复
class abc
{
public:
abc(int i,int j){x=i;y=j;}
abc(abc &R){cout << "i am called\n";x=R.x;y=R.y;}
void out(){cout<<x<<y<<endl;}
private:
int x,y;
};
int main()
{
abc m(1,2);
abc n=m;
m.out();
n.out();
return 0;
}


执行的结果是abc(abc &R){cout << "i am called\n";x=R.x;y=R.y;}被调用了。


c++里不写函数的返回值编译过不去,构造函数和析构函数没有返回值。


33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧