C++ 和C# 继承机制的差异之浅见

C++继承方式总共分为以下几种:

public、private、protected三种(它们直接影响到派生类的成员、及其对象对基类成员访问的规则)。

(1)public(公有继承):继承时保持基类中private成员被隐藏,其它各成员属性不变,被继承为派生类的成员。so派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。

(2)private(私有继承):继承时基类中private成员被隐藏,其它各成员属性均变为private,被继承为派生类的成员。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

(3)protected(保护性继承):继承时基类中private成员被隐藏,其它各成员属性均变为protected,被继承为派生类的成员。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

但是C#的继承只能通过成员变量的权限控制来实现。

在C++中,一个变量如果通过不同的继承方式,那么它在继承的过程中可访问程度会发生很大变化。

如 

Class A
{
public int a1(){};
protected int a2(){};
private int a3(){};
}
Class B1:protected A
{
 a1;//可访问,变为自身的preotected
 a2;//可访问,变为自身的preotected
     //a3;不可访问
}
Class B2:private A
{
 a1;//可访问,变为自身的private
 a2;//可访问,变为自身的private
     //a3;不可访问
}
Class C1:protected B1
{
       a1;//是B1的保护成员,被继承,变为自身的保护成员
       a2;//是B1的保护成员,被继承,变为自身的保护成员
}
Class C2:protected B2
{
       //a1;是B2的私有成员,已经无法再被继承
       //a2;是B2的私有成员,已经无法再被继承
}

所以,一个可以被继承的成员变量在不同的继承方式中,最后有可能丢失无法再被继承。而C#中,没有继承方式的概念。一个成员变量如果可以被继承,那么他就会被派生类一直继承。

就像一个家族的传家之宝,C++中由于某一代的原因,这个传家之宝可能会不传给下一代,致使后代都得不到。而C#中,这个传家之宝会一直被传递下去(除非在传递过程中发生其它的人为因素)。

当然了,本文的探究仅限于继承的可访问性

(后继文章将就C#的成员修饰符做一定的简要分析)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值