当前位置:主页 > 软件编程 > 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()”。也就是说,通过“类型兼容规则”访问的永远是父类成员,而不是子类成员。

您可能感兴趣的文章:

相关文章