经典指数          
原因
1973
浏览数
0
收藏数
 

基于以下程序段:
class A
{
    public:
    A()
    {
        printf("A");
    }
    ~A()
    {
        printf("~A");
    }
};
class B
{
    public:
    B(A &a):_a(a)
    {
        printf("B");
    }
    ~B()
    {
        printf("~B");
    }
    private:
    A _a;
};
int main()
{
    A a;
    B b(a);
    return 0;
}

以上程序段输出是:
  • A B ~B ~A
  • A A B ~B ~A ~A
  • A B ~B ~A ~A
  • 以上都不对

     举报   纠错  
 
切换
1 个答案

答案:C 原因:(1)A a;语句调用A的构造函数,输出A            (2)B

b(a);首先调用A的复制构造函数,然后调用B的构造函数,由于没有自定义A的复制构造函数,所以没有输出,B的构造函数输出B。

          

(3)析构的的顺序与构造的顺序相反,但是,由于调用了A的复制构造函数,所以析构的时候会多一次~A的输出,这个析构函数的调用与A的复制构造函数对应。

        如果在A类里面加入复制构造函数,比如

    A(const A & data)

    {

        printf("A&  ");

    } 这个时候的输出就是:

A A&  B ~B ~A ~A

 
切换
撰写答案