欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C++类型兼容规则详情

时间:2022-06-17 08:35:33|栏目:C代码|点击:

在类的继承过程中,子类继承了父类除去构造函数和析构函数外的所有成员,那么父类的功能子类是不是都有呢?

实际上,子类是否含有父类的全部功能,取决于“继承方式”。在共有(public)继承的情况下,父类的public成员在子类中是public成员,父类的protected成员在子类中是protected成员。也就是说,此时,父类对外暴露的功能,子类都有。

因此,在共有继承时,任何需要父类对象的地方,都能使用子类对象“替代”,这就是类型兼容规则。

其中“替代”包含下面三种情况:

  • 子类对象隐含转换为父类对象;
  • 子类对象用于初始化父类引用;
  • 子类对象地址隐含转换为父类指针;

下面定义的三个函数,分别对应上述三种情况。其中Animal为父类,Duck为子类,Animal和Duck都定义了public类型的eat()函数:

// 子类对象隐含转换为父类对象;
void situationOne(Animal animal) {
    animal.eat();
} 

// 子类对象用于初始化父类引用
void situationTwo(Animal &r) {
    r.eat();
}

// 子类指针隐含转换为父类指针
void situationThree(Animal *p) {
    p->eat();
}

现在,可以使用子类对象作为函数参数传入到上述三个函数中:

Duck duck;

situationOne(duck);
situationTwo(duck);
situationThree(&duck);

注意:三个函数中通过父类调用的eat()函数永远是“父类成员函数eat()”而不是“子类成员函数eat()”。也就是说,通过“类型兼容规则”访问的永远是父类成员,而不是子类成员。

上一篇:用C++实现推箱子小游戏

栏    目:C代码

下一篇:C语言中static的使用介绍

本文标题:C++类型兼容规则详情

本文地址:http://www.codeinn.net/misctech/205058.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有