即使它们是私有的,基类的好友函数如何调用派生类的重写虚拟函数?(C ++)

Mahedi Kamal

我的代码-

class base{
private:
     virtual void print(){
        cout<<" from base"<<endl;
    }
    friend void show(base &obj);
};
class drived1 : public base{
private:
    void print(){
        cout<<" from drived1"<<endl;
    }
};
class drived2 : public base{
private:
    void print(){
        cout<<" from drived2"<<endl;
    }
};
void show(base &obj){
    obj.print();
}

int main() {
    base b;
    drived1 d1;
    drived2 d2;
    
    show(b);
    show(d1);
    show(d2);
}

输出:
from base
from drived1 // 打印函数形式的派生类被调用,尽管它是私有的
from drived2 // 打印函数形式的派生类被调用,尽管它是private

show(base &obj) 是基类的朋友函数,但是它如何从派生类调用私有方法?

尤金

这就是C ++的工作方式。访问说明符publicprivateprotected)取决于变量的静态类型,而不是动态类型。在您的示例中

void show(base &obj){
    obj.print();
}

编译后,编译器不知道将使用drived1参数调用该函数。它知道obj类型base&,因此只检查它是否可以调用base::print()-之所以可以调用,因为它是friendof的base

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

派生类中的私有重写虚拟函数

来自分类Dev

C ++多态性:派生类调用基类虚拟函数,而不是重写的派生类

来自分类Dev

通过引用调用虚拟函数:派生类的重写被调用

来自分类Dev

在C ++中,公共继承基类调用派生类的私有虚拟功能

来自分类Dev

如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

来自分类Dev

如何从基类的派生类调用函数?

来自分类Dev

如何从基类调用派生类函数?

来自分类Dev

如何在派生类中重写`toString`并使用基类中的私有实例变量?

来自分类Dev

重写派生类C ++中基类私有成员的行为

来自分类Dev

如何在C ++中从基类构造函数调用派生类方法?

来自分类Dev

有关在派生类的基础上实现的C ++调用虚拟函数的问题

来自分类Dev

从派生类访问虚拟基类函数

来自分类Dev

虚拟基类函数中派生类的大小

来自分类Dev

从派生类构造函数调用基类构造函数

来自分类Dev

从基类构造函数调用派生类的成员函数

来自分类Dev

派生类的虚函数调用基类的虚函数

来自分类Dev

基类函数不调用派生类函数

来自分类Dev

从派生类构造函数调用基类构造函数

来自分类Dev

从使用派生类成员函数的基类调用函数

来自分类Dev

虚拟析构函数在基类和派生类中未调用

来自分类Dev

虚拟析构函数在基类和派生类中均未调用

来自分类Dev

如何使派生类函数在调用时始终调用相同的基类函数?

来自分类Dev

派生类不能访问私有成员(尽管构造函数是在基类中定义的)

来自分类Dev

派生类如何调用基类的私有方法?

来自分类Dev

来自派生类的调用函数,该派生类存储在具有基类类型的Map中

来自分类Dev

从基类的实例调用派生类的函数

来自分类Dev

从基类析构函数调用派生类方法

来自分类Dev

通过派生类对象调用基类函数

来自分类Dev

通过基类函数指针调用派生类

Related 相关文章

  1. 1

    派生类中的私有重写虚拟函数

  2. 2

    C ++多态性:派生类调用基类虚拟函数,而不是重写的派生类

  3. 3

    通过引用调用虚拟函数:派生类的重写被调用

  4. 4

    在C ++中,公共继承基类调用派生类的私有虚拟功能

  5. 5

    如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

  6. 6

    如何从基类的派生类调用函数?

  7. 7

    如何从基类调用派生类函数?

  8. 8

    如何在派生类中重写`toString`并使用基类中的私有实例变量?

  9. 9

    重写派生类C ++中基类私有成员的行为

  10. 10

    如何在C ++中从基类构造函数调用派生类方法?

  11. 11

    有关在派生类的基础上实现的C ++调用虚拟函数的问题

  12. 12

    从派生类访问虚拟基类函数

  13. 13

    虚拟基类函数中派生类的大小

  14. 14

    从派生类构造函数调用基类构造函数

  15. 15

    从基类构造函数调用派生类的成员函数

  16. 16

    派生类的虚函数调用基类的虚函数

  17. 17

    基类函数不调用派生类函数

  18. 18

    从派生类构造函数调用基类构造函数

  19. 19

    从使用派生类成员函数的基类调用函数

  20. 20

    虚拟析构函数在基类和派生类中未调用

  21. 21

    虚拟析构函数在基类和派生类中均未调用

  22. 22

    如何使派生类函数在调用时始终调用相同的基类函数?

  23. 23

    派生类不能访问私有成员(尽管构造函数是在基类中定义的)

  24. 24

    派生类如何调用基类的私有方法?

  25. 25

    来自派生类的调用函数,该派生类存储在具有基类类型的Map中

  26. 26

    从基类的实例调用派生类的函数

  27. 27

    从基类析构函数调用派生类方法

  28. 28

    通过派生类对象调用基类函数

  29. 29

    通过基类函数指针调用派生类

热门标签

归档