继承类和基类的构造函数

Posted pady

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承类和基类的构造函数相关的知识,希望对你有一定的参考价值。

1.类的默认构造函数

 

1     public class BaseClass
2     {
3         public BaseClass()
4         { 
5             //
6         }
7     }
8    

2.派生类构造函数

 

默认构造函数

 1  //基类(父类)
 2     public class BaseClass
 3     {
 4         public BaseClass()
 5         { 
 6             //
 7         }
 8     }
 9     //继承类(子类)
10     public class inheritanceClass:BaseClass
11     {
12         public inheritanceClass()
13         {
14             //
15         }
16     }

 

通过VS断点查看执行过程。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

先是到

inheritanceClass构造函数,此时并不进入花括号里的语句(因为没有参数,所以不需要进行传参数给父类)->接着执行BaseClass构造函数的语句块->再执行inheritanceClasss构造函数的语句块

带参数的构造函数
派生类构造函数的参数个数和类型要和父类一致
派生类(类型 参数):base(参数)

 1  //基类(父类)
 2     public class BaseClass
 3     {
 4         string A;
 5         public BaseClass(string a)
 6         {
 7             A = a;
 8         }
 9     }
10     //继承类(子类)
11     public class inheritanceClass:BaseClass
12     {
13         public inheritanceClass(string w):base(w)
14         {
15             //
16         }
17     }

断点执行过程和默认构造函数是一样的。

inheritanceClass构造函数,进行参数传递,不进入语句块->接着执行BaseClass构造函数语句块->再执行inheritanceClasss构造函数语句块。


多个层的继承
 public class GradeFatherClass
    {
        //爷爷类
        private string B;
        public GradeFatherClass(string b)
        {
            B = b;
        }
        public void Display(string show)
        {
            Console.WriteLine("爷爷:{0}", show);
        }

    }
    //基类(父类)
    public class BaseClass : GradeFatherClass
    {
        string A;
        public BaseClass(string a):base(a)
        {
            A = a;
        }
        public void Display()
        {
            Console.WriteLine("爸爸:{0}",A);
        }
    }
    //继承类(子类)
    public class inheritanceClass:BaseClass
    {
        private string W;
        public inheritanceClass(string w):base(w)
        {
            W = w;
        }
        public new void Display()
        {
            Console.WriteLine("我:{0}", W);
        }
    }
GradeFatherClass为第一个父类,BaseClass 是GradeFatherClass的子类.
inheritanceClass又是BaseClass的子类.
所以,
GradeFatherClass是爷爷类,BaseClass是爸爸类,inheritanceClass是儿子类。

多个层的继承构造函数的执行过程

先到儿子类,进行传参

技术分享图片

 

再到爸爸类,传参

技术分享图片

 

接着到爷爷类。此时就开始执行初始化语句了。

技术分享图片

 

技术分享图片

 

接着执行爸爸类构造函数语句

技术分享图片

 

再执行儿子类构造函数语句

技术分享图片

 















以上是关于继承类和基类的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

生成一个派生类对象时,调用基类和派生类构造函数按啥次序

关于C++基类与派生类

请问把基类构造函数声明为protected有啥好处呢(抽象基类)

C++中派生类的构造函数怎么显式调用基类构造函数?

C++基类和派生类的构造函数

派生类和基类的转换