C++函数调用问题
程序是这样的:#include <iostream>using namespace std;
class A{private: int m;public: A( int i = 0 ){ m = i; cout << "construction." << m << endl;} A( const A & a); A operator=(const A & a); void print()const; ~A(){ cout << "destruction" << m << endl ; }};
void fun(const A & a);
A::A(const A & a){ m = a.m; cout << "copy construction." << m << endl;}
A A::operator=(const A & a){ m = a.m; cout << "Assign construction." << m << endl; return *this;}
void A::print()const{ cout << m << endl;}
void fun( const A & a){ a.print();}
int main(void){ A a,b = 5; a = 4; fun(a); fun(5); return 0;}运行结果为:(实在搞不懂这个运行结果)

前面还明白,后面就不懂了,想了好久,查资料也弄不明白,各位高手帮帮忙的啦,
答案:1、首先A a调用默认构造函数(也就是那个A(int i=0)),就显示了屏幕上的第一行
2、接着是 b=5:
使用A类得A(int i=0),将这个“5”传递给参数 i ,构造了b(注意这虽是用"="来初始化,但仍是初始化 : 使用匹配的构造函数而不是赋值构造函数(但如果参数是A类对象就要调用复制构造)),输出了屏幕上的第二行
3、a=4 :
①赋值构造函数的参数要求是A类得引用,但实参却是int,所以要进行隐式装换:首先使用
4作为实参传递给A累的构造函数A(int i=0)构造一个临时对象(在作用域结束后自动删除)输出了屏幕上的第三行,然后将这个临时对象传递给赋值操作符函数(operator =)进行赋值操作,输出了第四行
②返回时,是返回的A类得对象而不是引用,所以要调用一个复制构造来创建一个临时对象
显示了第5行,然后返回结束调用这个临时对象的析构,显示第6行
4、fun(a):
输出了第7行
5。、fun(5):
①fun要求参数是A类得引用,这里不匹配又进行隐式转换(参见第三步),输出了第8行
②fun函数调用print,输出第9行
②临时对象再返回时作用域结束,调用析构,输出第9行
6、return 0:
main函数结束,所有对象结束作用域。调用现在还存在的所有对象的析构,输出10,11行
从 main 函数开始,一个个找,都能找到的。
你看看在每个执行的代码中,都执行了什么
上一个:怎么样学好C++?
下一个:C++ pop3接收邮件