当前位置:编程学习 > C/C++ >>

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接收邮件

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,