| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 602 人关注过本帖
标题:为什么这样输出?求输出的每句原因!
只看楼主 加入收藏
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
结帖率:84.21%
收藏
已结贴  问题点数:20 回复次数:3 
为什么这样输出?求输出的每句原因!
#include "stdio.h"
#include "iostream.h"

class A
{
public:
    A()
    {
        a=0;
        cout<<"调用A类的无参构造函数A()"<<endl;
    }
    A(int i)
    {
        a=i;
        cout<<"调用A类的带参构造函数A(int)"<<endl;
    }
    ~A()
    {
        cout<<"调用A类的析构函数"<<endl;
    }
    void Print()    const
    {
        cout<<a<<",";
    }
    int Geta()
    {
        return a;
    }
private:
    int a;
};
//用类B继承类A
class B:public A
{
public:
    B()
    {
        b=0;
        cout<<"调用B类的无参构造函数B()"<<endl;
    }
    B(int i,int j,int k);
    ~B()
    {
        cout<<"调用B类的析构函数"<<endl;
    }
    void Print();
private:
    int b;
    A oa;    //父类对象为子类成员变量.
};
B::B(int i,int j,int k)
{
    b=k;
    cout<<"调用B类的带参构造函数B(int,int,int)"<<endl;
}
void B::Print()
{
    A::Print();
    cout<<b<<","<<oa.Geta()<<endl;
}
void main()
{
    B ob[3];
    ob[0]=B(1,2,3);
    ob[1]=B(4,5,6);
    ob[2]=B();
    for(int i=0;i<3;i++)
        ob[i].Print();
    getchar();
}
搜索更多相关主题的帖子: private include public return 
2011-11-21 22:21
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:7 
没有为什么
因为爱所以爱

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2011-11-22 12:18
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:7 
这么多输出语句,谁有时间帮你一句句讲
就是掌握调用顺序就好了,构造函数调用顺序是先基类后派生类,析构是先派生类后基类
2011-11-22 12:31
我是菜鸟C
Rank: 4
等 级:业余侠客
帖 子:74
专家分:200
注 册:2011-3-27
收藏
得分:7 
调用A类的无参构造函数A()
调用A类的无参构造函数A()
调用B类的无参构造函数B()//初始化b【0】,构造时先基类后派生类,基类无参执行两次的原因是因为派生类中有一个数据成员A oa还会调用一次无参A();
调用A类的无参构造函数A()
调用A类的无参构造函数A()
调用B类的无参构造函数B()//初始化b【1】
调用A类的无参构造函数A()
调用A类的无参构造函数A()
调用B类的无参构造函数B()//初始化b【2】

调用A类的无参构造函数A()
调用A类的无参构造函数A()
调用B类的带参构造函数B(int,int,int)
调用B类的析构函数
调用A类的析构函数
调用A类的析构函数
调用A类的无参构造函数A()
调用A类的无参构造函数A()
调用B类的带参构造函数B(int,int,int)
调用B类的析构函数
调用A类的析构函数
调用A类的析构函数
调用A类的无参构造函数A()
调用A类的无参构造函数A()
调用B类的无参构造函数B()
调用B类的析构函数
调用A类的析构函数
调用A类的析构函数   //道理同上。
0,3,0
0,6,0
0,0,0      //输出其实是cout<<a<<k<<a<<endl;
2011-11-24 10:00
快速回复:为什么这样输出?求输出的每句原因!
数据加载中...
 
   



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

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