参考:http://www.weixueyuan.net/view/6362.html

总结:

  假设类C继承自类B,类B继承自类A。那么类C中的除了能够继承B类的成员函数和成员变量外,同样也能继承B类继承自A类的所有成员。换言之,类C可以继承来自类A的所有成员。因此继承既可以是直接继承,也可以是间接继承。

例1:

class A
{
public:
int getx(){return x;}
void setx(int a){x = a;}
private:
int x;
}; class B : public A
{
public:
int gety(){return y;}
void sety(int b){y = b;}
private:
int y;
}; class C : public B
{
public:
int getz(){return z;}
void setz(int c){z = c;}
private:
int z;
};

在本例中,先定义了类A,然后通过派生定义了类B,之后再派生出类C。B类和C类都有自己新增的成员变量和成员函数。下面我们将以表格的形式列出类A、B和C的所有成员和成员变量。

成员 属性 来源
A x private 自身
getx public 自身
setx public 自身
B x 不可访问 继承自类A
setx public 继承自类A
getx public 继承自类A
y private 类B新增
sety public 类B新增
gety public 类B新增
C x 不可访问 继承自类B
setx public 继承自类B
getx public 继承自类B
y 不可访问 继承自类B
sety public 继承自类B
gety public 继承自类B
z private 类C新增
setz public 类C新增
getz public 类C新增

从表中我们可以看出类C不仅包含B类的成员,同时还包含了类A中的成员,在表格中我们都这些成员都统一归为继承自类B,而实际上我们也可以将成员变量x及成员函数setx和getx视为间接继承自类A。当然,间接继承所得的成员变量和成员函数,其属性遵循直接继承时的规则。

3.5 C++间接继承的更多相关文章

  1. MVC 直接或间接继承自ActionResult的类型

    •ViewResult:使用View()可以指定一个页面,也可以指定传递的模型对象,如果没有指定参数则表示返回与Action同名的页面 •ContentResult:使用Content(string ...

  2. java基础-继承

    浏览以下内容前,请点击并阅读 声明 一个由其他类继承的类叫子类(也叫继承类,扩展类等),该类继承的类叫父类或超类.除了Object类意外,所有的类都有切仅有一个父类,如果一个类没有用extends关键 ...

  3. C#中的继承

    按照我个人的理解,继承和实现接口不是一个概念,结构和类型都可以实现接口,枚举不能. 话说,结构可以继承吗? 先梳理一下C#中的继承关系,如下图: class => [BaseClass => ...

  4. Java学习笔记 07 接口、继承与多态

    一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...

  5. java中的继承Object

    一个类,要么是直接继承Object,要么就是间接继承Object,如下: class A{ } class B extends A{ } B 是A的子类,A是Object的子类,所以B间接继承了Obj ...

  6. JavaScript强化教程——Cocos2d-JS中JavaScript继承

    javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...

  7. C++多继承

    1.继承的三种方式: 公有继承(public),私有继承(private),保护继承(protected)三种继承方式的说明,如下表所示: 特征 公有继承 保护继承 私有继承 公有成员变成 派生类的公 ...

  8. Cocos2d-JS中JavaScript继承

    JavaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...

  9. C++链式继承

            继承,对于学习C++的每一个人来说,都不会陌生.在Qt的开发中,如果你需要对一个无边框的界面支持move操作,那么你就得通过继承重写虚函数来实现,这并不难,但如果我还需要对一个按钮支持 ...

随机推荐

  1. Getting started with Processing 第十三章——延伸(1)

    导入库: 导入库的名称为:import processing.libName.* 声音 播放声音 支持的格式:wav,aiff,mp3声明: SoundFile blip;创建:blip = new ...

  2. 雷林鹏分享:XML 实例

    XML 实例 这些例子演示了 XML 文件.XML 格式化和 XML 转换(XSLT). 还演示了与 XML 一起使用的 JavaScript(AJAX). 查看 XML 文件 查看一个简单的 XML ...

  3. springboot---->获取不到yml配置文件指定的值

    import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.Spr ...

  4. Binary Gap(二进制空白)

    中文标题[二进制空白] 英文描述 A binary gap within a positive integer N is any maximal sequence of consecutive zer ...

  5. Confluence 6 自定义你的空间

    通过对你的空间进行界面的自定义能够让你的空间更加出类拔萃. 如果你具有空间管理员权限,你可以修改你空间的颜色配色,添加你自己的空间标识,选择是否在你空间中显示边栏.或者你可以进入 Atlassian ...

  6. VS Code插件

    VS Code下载地址: https://code.visualstudio.com/ 1.view in browser   和  Open-In-Browser  安装可在编辑器中打开html,在 ...

  7. redis 持久化方式

    对于persistence持久化存储,Redis提供了两种持久化方法: Redis DataBase(简称RDB) 执行机制:快照,直接将databases中的key-value的二进制形式存储在了r ...

  8. mysql分组统计以及全部统计union all使用

    select '全部' AS `organ_category`, COUNT(*) AS amount FROM `organ_new` WHERE `city_code` ='SZ0755' AND ...

  9. python-django rest framework框架之渲染器

    渲染器 看到的页面时什么样子的,返回数据. restframework中默认就是下面 这两个render类,它的内部实现原理是拿url中的后缀名 .json 和类中的format字段进行比较,如果re ...

  10. poj-2154-polya+euler函数

    Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11758   Accepted: 3783 Descriptio ...