为什么派生类指针指向基类可以调用派生类成员函数?

里克
#include <iostream>
using namespace std;

struct Base {
    void doBase() {
        cout << "bar" << endl;
    }
};

struct Derived : public Base {
    void doBar() {
        cout << "bar" << endl;
   }
};

int main()
{
    Base b;
    Base* b_ptr = &b;
    Derived* d_ptr = static_cast<Derived*>(b_ptr);
    d_ptr->doBar(); //Why there is no compile error or runtime error?
    return 0;
}

该程序的输出为bar\n

d_ptr 实际上,它在调用派生类成员函数时指向基类。

是未定义的行为还是其他?

尤金

是的,这是未定义的行为。

因为您使用过,所以没有编译时错误static_cast-这是一种告诉编译器“我比您更了解类型的方法”。您告诉您的对象是Derived您对编译器撒谎-这是未定义的行为。

碰巧是有效的,因为doBar()不使用任何Derived成员。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当在C ++中获得指向基类的指针时,为什么不为派生类对象调用重载函数?

来自分类Dev

C ++继承:指向基类的派生类指针调用派生类方法

来自分类Dev

派生类指向基类对象的指针如何调用派生类的方法?

来自分类Dev

存储指向基类中派生类函数的指针

来自分类Dev

为什么派生类的私有虚拟成员函数可以从基类访问

来自分类Dev

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

来自分类Dev

如何指向派生类的成员函数的指针

来自分类Dev

为什么派生类可以调用基类构造函数两次?

来自分类Dev

为什么`this`在调用派生类对象时无法从基类方法访问派生类成员

来自分类Dev

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

来自分类Dev

在派生类的对象上使用指向基类成员函数的指针

来自分类Dev

如何使用指向函数的指针在基类构造函数中调用派生类的方法?

来自分类Dev

派生类上的成员函数指针

来自分类Dev

Pybind - 使用指向派生类的共享指针调用函数

来自分类Dev

为什么在C ++中使用基类指针无法到达派生类的成员函数?它的设计思想是什么?

来自分类Dev

派生类的成员函数

来自分类Dev

在C ++继承中,当指向基类的指针对象指向派生类时,不调用派生类析构函数

来自分类Dev

指向派生类的基类指针无法访问派生类方法

来自分类Dev

如何防止基类的指针指向派生类?

来自分类Dev

For循环和基类指针指向派生类的问题

来自分类Dev

指向派生类的指针是否首先创建基类?

来自分类Dev

从指针到基类成员函数的派生类成员函数的指针

来自分类Dev

如何通过类型为base的指针访问派生类中的成员,但指向派生类

来自分类Dev

为什么基类指针指向基类中的纯虚方法而不是派生类中的重写方法?

来自分类Dev

为什么基类指针即使拥有派生类对象地址也总是指向基类?

来自分类Dev

从基类指针访问派生类成员

来自分类Dev

从基类的指针访问派生类的成员

来自分类Dev

从派生类调用基函数时会发生什么?

来自分类Dev

(为什么)在纯虚拟派生类中是否需要虚拟基类构造函数调用?

Related 相关文章

  1. 1

    当在C ++中获得指向基类的指针时,为什么不为派生类对象调用重载函数?

  2. 2

    C ++继承:指向基类的派生类指针调用派生类方法

  3. 3

    派生类指向基类对象的指针如何调用派生类的方法?

  4. 4

    存储指向基类中派生类函数的指针

  5. 5

    为什么派生类的私有虚拟成员函数可以从基类访问

  6. 6

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

  7. 7

    如何指向派生类的成员函数的指针

  8. 8

    为什么派生类可以调用基类构造函数两次?

  9. 9

    为什么`this`在调用派生类对象时无法从基类方法访问派生类成员

  10. 10

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

  11. 11

    在派生类的对象上使用指向基类成员函数的指针

  12. 12

    如何使用指向函数的指针在基类构造函数中调用派生类的方法?

  13. 13

    派生类上的成员函数指针

  14. 14

    Pybind - 使用指向派生类的共享指针调用函数

  15. 15

    为什么在C ++中使用基类指针无法到达派生类的成员函数?它的设计思想是什么?

  16. 16

    派生类的成员函数

  17. 17

    在C ++继承中,当指向基类的指针对象指向派生类时,不调用派生类析构函数

  18. 18

    指向派生类的基类指针无法访问派生类方法

  19. 19

    如何防止基类的指针指向派生类?

  20. 20

    For循环和基类指针指向派生类的问题

  21. 21

    指向派生类的指针是否首先创建基类?

  22. 22

    从指针到基类成员函数的派生类成员函数的指针

  23. 23

    如何通过类型为base的指针访问派生类中的成员,但指向派生类

  24. 24

    为什么基类指针指向基类中的纯虚方法而不是派生类中的重写方法?

  25. 25

    为什么基类指针即使拥有派生类对象地址也总是指向基类?

  26. 26

    从基类指针访问派生类成员

  27. 27

    从基类的指针访问派生类的成员

  28. 28

    从派生类调用基函数时会发生什么?

  29. 29

    (为什么)在纯虚拟派生类中是否需要虚拟基类构造函数调用?

热门标签

归档