高质量程序设计指南c++/c语言(5)--构造函数和值传递惹的祸

#include<iostream>
using namespace std;

class A;

void bad_fun(A a);

class A
{
public:
    A(){}
    A(const A &a)
    {
        cout << "A" << endl;
        bad_fun(a);
    }
};

void bad_fun(A a)
{
}

int main(void)
{
    A a;
    bad_fun(a);

    return 0;
}

bad_fun函数与拷贝构造函数互相调用,上面的代码会一致递归运行下去,直到栈溢出。

 

我在写上面代码的时候,出现了一段小插曲

#include<iostream>
using namespace std;

class A;

void bad_fun(A a)
{
}

class A
{
public:
    A(){}
    A(const A &a)
    {
        cout << "A" << endl;
        bad_fun(a);
    }
};



int main(void)
{
//    A a;
//    bad_fun(a);

    return 0;
}

上面的代码会出现编译错误。

void bad_fun(A a)
{
}
这时,函数bad_fun需要知道参数A a的具体类型,所以A的定义应该在此函数之前完成。

posted on 2013-04-26 16:43  江在路上2  阅读(184)  评论(0编辑  收藏  举报