warframe矿枪厉害么:c++高手快帮忙,我头都大啦

来源:百度文库 编辑:高考问答 时间:2024/05/05 06:25:56
#include<iostream>
#include<string>
using namespace std;
class A{
public:
A(const string& id=""):name(id){++objcnt;cout<<"gou zao\n";}

~A(){--objcnt;cout<<"~A()\n";}

A(const A& h):name(h.name){name+=" =>copy";cout<<"haha\n";++objcnt;cout<<objcnt<<endl;}

void print(const string& msg="")
{
if(msg.size()!=0)
cout<<msg<<endl;
cout<<'\t'<<name<<":"<<"objcnt="<<objcnt<<endl;
}

private:

string name;
static int objcnt;
};
int A::objcnt=0;
A f(A a)
{
a.print(" a in f()");
cout<<"return from f()"<<endl;
return a;
}
int main()
{
A a("h");
//cout<<"-------------"<<endl;
//A a2(f(a));
//a2.print("h2 after f()");
//cout<<"after h2"<<endl;
f(a);

// cout<<"sdfff----zzzzzzzzzz"<<endl;
system("pause");
return 0;
}
对象作参数是。要调用拷贝构造函数么?
在dev-cpp结果是:
gou zao
haha
2
a in f()
h =>copy:objcnt=2
return from f()
haha
3
~A()
~A()
请按任意键继续. . .
我在拷贝函数中加了一条跟踪语句,输出haha.我想知道结果中的两个haha是怎么得到的,也就是说为什么会调用了2次拷贝构造函数,那两个析构函数也应该是临时对象的,可就是不明白怎么来的,懂汇编就好了,谁能解释一下函数调用时到底是如何压栈的,上面若是按引用传值又是如何运作的呢????亟待。。。。

对象作参数是。要调用拷贝构造函数么? 要构造调用
public 与private 重复输出2个haha