关闭

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

发表于:2013-1-07 10:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wangzhen199009    来源:51Testing软件测试网采编

  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#的成员修饰符做一定的简要分析)

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号