免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2034 | 回复: 2
打印 上一主题 下一主题

[C++] 【原创】C++ 基础考考自己,看程序写出输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-17 01:30 |只看该作者 |倒序浏览
class NoVirtualClass
{
public:
    NoVirtualClass()
    {
       std::cout << " NoVirtualClass " << endl;
    }

    ~NoVirtualClass()
    {
       std::cout << " ~NoVirtualClass " << endl;
    }
};

class VirtualClass
{
public:
    VirtualClass()
    {
       std::cout << " VirtualClass " << endl;
    }

    ~VirtualClass()
    {
       std::cout << " ~VirtualClass " << endl;
    }
};

class subClass: public NoVirtualClass, virtual public VirtualClass
{
public:
    subClass()
    {
        std::cout << " subClass" << endl;
    }
   
    ~subClass()
    {
        std::cout << " ~subClass" << endl;
    }
};

class A
{
public:
   A()
   {
     std::cout << "A" << endl;
   }

   ~A()
   {
     std::cout << "~A" << endl;
   }

};

class C
{
public:
   C()
   {
     std::cout << "C" << endl;
   }

   ~C()
   {
     std::cout << "~C" << endl;
   }

};


class B: public A
{
public:
   B()
   {
     std::cout << "B" << endl;
   }

   ~B()
   {
     std::cout << "~B" << endl;
   }

private:

   C c;

};


struct stA
{
    stA()
    {
       cout << "stA" << endl;
    }
};


struct stB : stA
{
    stB()
    {
       cout << "stB" << endl;
    }
};

struct stC
{
    stC()
    {
       cout << "stC" << endl;
    }
};


struct stD: stB
{
    stD()
    {
       cout << "stD" << endl;
    }

};

struct stE
{
    struct stA a;
    struct stC c;
    struct stD d;
   
   
    stE()
    {
       cout << "stE" << endl;
    }

};

void funRec(int i)
{
   if(i < 5)
   {
     funRec(++i);
   }
   
    cout << " " << i ;

    return;
}


int main(void)
{
    subClass sub;

    volatile char *pvch = new volatile char[10];
    delete pvch;

    cout << endl;

    B b;

    cout << endl;

    struct stE e;

    cout << endl;

    funRec(1);

    cout << endl;
    cout << endl;




    return 0;
}




Output:

  VirtualClass
NoVirtualClass
subClass

A
C
B

stA
stC
stA
stB
stD
stE

5 5 4 3 2

~B
~C
~A
~subClass
~NoVirtualClass
~VirtualClass


刘峰六点评:

(1) 如果有多个父类,其中有虚继承的情况下,不管初始化列表的顺序如何,都会先初始化虚继承的基类,在初始化非虚继承的基类
(2)  如果有类中含有类成员,那么顺序是(1) 基类 (2) 子类类成员 (3)子类

(3)  如果有递归调用,函数的局部变量不会随递归调用的对局部变量的改变而改变,当时是几就是几

论坛徽章:
0
2 [报告]
发表于 2011-02-17 12:04 |只看该作者
{:3_183:} 总结的不错 赞一个

论坛徽章:
0
3 [报告]
发表于 2011-02-17 13:08 |只看该作者
不喜欢玩基础概念
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP