是这样的。。比如:class A
{
   
}class B:A
{}当我 B b=new B(); 的时候,是会在堆上创建2个类A和B呢?还是编译器会把A和B进行合并,只分配B(包括了A)。但是这样的话,调用A的构造函数初始化A的话,是怎么实现的? 

解决方案 »

  1.   

    当我 B b=new B();只有一个B对象吧,那调用基类的构造函数,不太懂学习
      

  2.   

    B b = new B();
    只有一个对象就是b,但是在生成b时A、B两个类的构造函数都是执行了的,是先执行最基本的基类A的构造函数,在执行派生类B的构造函数。如果A类只有默认的无参的构造函数,那么生成b时就不用管A,直接用B b = new B();这句就是了。
    如果A含有带参数的构造函数,生成B的对象时要调用A带参的构造函数,而不是调用A的默认构造函数时,B的构造函数就要小心了
    Public B() : base(20//缺省值)
    {
    }
    如果B的构造函数也含有和基类A构造函数相同类型的参数
    Public B(type para) : base(para)
    {
    }
      

  3.   

    我也一直没弄明白,但是《你必须知道的.NET》中,确实讲了子类实例化时发生了什么
      

  4.   


    《你必须知道的.NET》http://www.cnblogs.com/anytao/archive/2007/09/14/must_net_catalog.html
      

  5.   


    谢谢wuyq11,那请问实例化派生类的时候,是不是基类也会实例化啊。。 就是会同时实例化多个类
      

  6.   

    实例化派生类只会生成一个对象,基类的构造函数只是会被执行,并不被实例化。例如Button类,其基类最终是object,中间还要很多派生类,但实例化Button时,它上面的所有的父类的构造函数都会执行,但只是被执行,最终实例化的只有Button类对象。
    我觉得执行上面的基类只是走一个因果流程,可以理解为执行A的构造函数后就有了A,之后才能生成B。先有A后才有B,因此生成B的对象前要认宗,完事之后就可以生成对象了,至于“认宗”的过程如果执行的基类构造函数不带参数那就纯粹是一个过程而已,不用去计较。但有些类构造函数带参是为了初始化一些内部变量,这种情况下执行带参的基类构造函数的参数就只能从派生类获得,所以实例化派生类B时就要多一个过程
      

  7.   

    基础没打好呀,,,,,,如果真的想学,看看<深度探索:C++对象模型>
      

  8.   

    简单 ...
       这里不能画图  ...一绘图就一目了然了   ...派生类对象是分两部分的 ,上半部分是base类的 ,后面半部分是派生类特有 ...
      

  9.   

    你new 什么  在堆中 创建什么