Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2085692
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2011-02-17 01:33:11

 
 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)  如果有递归调用,函数的局部变量不会随递归调用的对局部变量的改变而改变,当时是几就是几
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/asiainfolf/archive/2011/02/17/6189895.aspx
阅读(2208) | 评论(1) | 转发(0) |
0

上一篇:职场必备技之东丈

下一篇:没有了

给主人留下些什么吧!~~

chinaunix网友2011-03-06 15:49:23

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com