C++ VS C (9) 继承

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

//=====================================================================
//TITLE:
//    C++ VS C#(9):继承
//AUTHOR:
//    norains
//DATE:
//    Thursday  17-January-2011
//Environment:
//    Visual Studio 2010
//    Visual Studio 2005
//=====================================================================


1. 继承

 

   C++和C#都有类,那么自然而然,继承的存在也不在话下。不过在继承方面,两者差异颇多。最明显的区别在于,C++可以多重继承,也就是说,C++能够有多个父类,而C#只有一个。换句话来说,下面这段代码可以在C++中顺利编译,但在C#中却是会遭到编译器无情的抱怨:
   class CMyBase_A   {  ...   };      class CMyBase_B   {  ...   };      //CMyClass同时继承于CMyBase_A和CMyBase_B。这段代码在C#中无法通过   class CMyClass:    public CMyBase_A,    public CMyBase_B   {  ...;   };    


   是不是说,C#永远只能继承于一个父类,而无法有更多的扩展了?C#比C++多了两个+,自然不会犯如此愚蠢的错误,因为它还有一个叫做接口的东西。和只能有一个父类不一样,接口可以有多个。接口的关键字是interface,和类相似,也能够用public或internal来进行修饰。所不同的是,不能使用abstract或sealed,因为这两个关键字对于接口来说,是没有任何意义的,因为接口必须是不能实例化,且一定能够被继承的。
  
   如果以接口的方式来更改上述的代码,那么在C#中将会变更为如此:
       class CMyBase   {  ...   };    interface IMyBase_A   {  ...   };    interface IMyBase_B   {  ...   }; //一个父类,多个接口    class CMyClass:        CMyBase,        IMyBase_A,        IMyBase_B    {        ...  };
  
  这里让C++程序员容易忽略的是,C#的接口的顺序是有严格规定的,接口必须排在类之后,也就是说,下面这段代码是错误的:
  //接口排在类的前面,该代码无法进行编译    class CMyClass:                IMyBase_A,  CMyBase,        IMyBase_B    {        ...  };
  
  
  C#在继承中还有一个容易让人忽略的小问题,就是派生类绝对不能比父类的的可访问权限高,如下代码所示:
  //父类为internal  internal class CMyBase  {    ...    } //派生类为public,无法通过编译    public class CMyClass:        CMyBase    {        ...    };
  
  在这段代码中,父类的CMyBase被internal所修饰,而派生类CMyClass被public修饰,因为public的可访问权限远远高于internal,违反了派生类可访问权限不能高于父类的规定,所以这段代码无论如何也不能通过编译。

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值