有个面向对象的问题请教大神

xx93110 2016-12-19 07:21:35
#include<iostream>
using namespace std;
class A
{
int x,y;
public:
A(int i=0,int j=0)
{
x=i;
y=j;
show();
cout<<"Constructor called.\n";
}
A(A &a);
~A()
{
show();
cout<<"Destructor called.\n";
}
void set(int i=0,int j=0){x=i;y=j;}
void show(){cout<<x<<','<<y<<',';}
};

A::A(A &a)
{
x=a.x;
y=a.y;
show();
cout<<"Copy constructor called.\n";
}
A fun(A a)
{
a.show();
cout<<endl;
a.set(3,7);
return a;
}
int main()
{
A a1,a2(6,8),a3(a2),a4;
a4= fun(a3);
a4.show();
a3.show();
cout<<endl;
return 0;
}

运行结果:

从第五行开始看不懂了,不是调用fun函数吗怎么又输出了呢请大神从第五行开始解释下
...全文
187 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-12-21
  • 打赏
  • 举报
回复
面向对象只是一种编程思想。 再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
赵4老师 2016-12-20
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察
ipqtjmqj 2016-12-20
  • 打赏
  • 举报
回复
你这代码不能称为“面向对象”,只能叫“基于对象”
小灸舞 2016-12-20
  • 打赏
  • 举报
回复
拷贝构造函数的调用时机:
 1、对象以值传递的方式传入函数参数
 2、对象以值传递的方式从函数返回
 3、对象需要通过另外一个对象进行初始化

单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
xx93110 2016-12-20
  • 打赏
  • 举报
回复
引用 3 楼 小灸舞的回复:
拷贝构造函数的调用时机:
 1、对象以值传递的方式传入函数参数
 2、对象以值传递的方式从函数返回
 3、对象需要通过另外一个对象进行初始化

单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
我明白了,自己问题出在"拷贝构造函数这里"。谢谢您的回答
paschen 版主 2016-12-19
  • 打赏
  • 举报
回复
A fun(A a) 你在调用fun函数时,fun函数的参数是由你对象复制过来的 参数是按值传递,所以会复制一个临时对象
yshuise 2016-12-19
  • 打赏
  • 举报
回复
编译器会优化掉

64,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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