| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖
标题:这两个程序的区别在哪呢 硬是没有看出来啊 大家帮忙看看
只看楼主 加入收藏
weishanhu03
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-4-24
收藏
 问题点数:0 回复次数:1 
这两个程序的区别在哪呢 硬是没有看出来啊 大家帮忙看看
class A
{  public:
    A()
    {
        cout<<"A"<<endl;
    }
    ~A()
    {
        cout<<"~A"<<endl;
    }
};
class B
{
public:
    B(A &a)
    {
        cout<<"B"<<endl;
_a=a;
    }
    ~B()
    {
        cout<<"~B"<<endl;
    }
private:
    A _a;
};
int main()
{
    A a;
    B b(a);
    return 0;
}

class A
{  public:
    A()
    {
        cout<<"A"<<endl;
    }
    ~A()
    {
        cout<<"~A"<<endl;
    }
};
class B
{
public:
    B(A &a):_a(a)
    {
        cout<<"B"<<endl;

    }
    ~B()
    {
        cout<<"~B"<<endl;
    }
private:
    A _a;
};
int main()
{
    A a;
    B b(a);
    return 0;
}
以上两段程序的输出结果怎么会不同呢
搜索更多相关主题的帖子: class private public return 
2008-08-05 10:08
zerocn
Rank: 1
等 级:新手上路
帖 子:126
专家分:0
注 册:2006-4-11
收藏
得分:0 
程序代码:
#include <iostream>
#include <stdlib.h>

using namespace std;
class A
{public:

 A(){ cout<<"A"<<endl; }

 ~A(){ cout<<"~A"<<endl;}
};
class B
{public:
B(A &a){cout<<"B"<<endl; _a=a;}
~B(){cout<<"~B"<<endl;}
private:
    A _a;
};

int main()
{

 {
    A a;
    B b(a);

 }
    system("pause");
    return 0;
}


从第一个程序分析:首先定义了A类的a对象,因此,调用构造函数输出A
                  然后,定义B类的b对象,并调用B(A &a)的构造函数,因为在调用构造函数的时候会对类成员初始化,但因为没有显式的初始化会调用缺省构造函数,因此再次输出A,(初始化是在构造函数的函数体前完成的),然后进行构造函数体的内容输出B和对_a赋值(注意,初始化和赋值是不同的!)。
所以最后结果是
A
A
B

程序代码:
#include <iostream>
#include <stdlib.h>

using namespace std;
class A
{public:

 A(){ cout<<"A"<<endl; }

 ~A(){ cout<<"~A"<<endl;}
};
class B
{public:
B(A &a):_a(a){cout<<"B"<<endl;}
~B(){cout<<"~B"<<endl;}
private:
    A _a;
};

int main()
{

 {
    A a;
    B b(a);

 }
    system("pause");
    return 0;
}


对于第二个程序:首先定义了A类的a对象,因此,调用构造函数输出A
                  然后,定义B类的b对象,并调用B(A &a)的构造函数,因为在调用构造函数的时候会对类成员初始化,但是这次有了显式的初始化_a(a);因此调用的是转换构造函数而不是默认的构造函数,因此没有和上面的程序一样输出A,然后进行构造函数体的内容输出B。
所以最后的结果是
A
B
2008-08-06 21:36
快速回复:这两个程序的区别在哪呢 硬是没有看出来啊 大家帮忙看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021465 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved