c++ - 你能解释一下类的方法是如何调用的吗?

标签 c++ visual-c++

conv.h

class Base 
{
public:
    void foo();
};

class Derived: public Base 
{
public:
    void bar();
};

class A {};
class B 
{
public:
    void koko();
};

转换.cpp

void Base::foo()
{
    cout<<"stamm";
}

void Derived::bar()
{
    cout<<"bar shoudn't work"<<endl;
}
void B::koko()
{
    cout<<"koko shoudn't work"<<endl;
}

主要.cpp

#include "conv.h"
#include <iostream>
int main()
{   
    Base * a = new Base;
    Derived * b = static_cast<Derived*>(a);
    b->bar();

    Derived * c = reinterpret_cast<Derived*>(a);
    c->bar();

    A* s1 = new A;
    B* s2 = reinterpret_cast<B*>(s1);
    s2->koko();
}

输出:

bar shoudn't work
bar shoudn't work
koko shoudn't work

尽管我创建了一个非派生的基类,但为什么方法 bar 在运行时被成功调用?它甚至适用于两种类型的转换(静态和重新解释转换)。

与上面相同的问题,但具有不相关的类(A 和 B)??

最佳答案

未定义的行为可以做任何事情,包括看起来有效。

关于c++ - 你能解释一下类的方法是如何调用的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12451003/

相关文章:

c++ - 在通用 lambda 捕获中使用 this 指针

c++ - 如何创建一个程序来识别最长的子串回文而不考虑字母大小写

c++ - 为什么 std::shuffle 采用右值引用?

c++ - 共享内存的强大 CRITCAL_SECTION?

c++ - 视觉未声明的标识符?

c++ - 调用指令中的偏移量损坏

C++ 类返回具有新地址的引用

c++ - x11/xlib 与 microsoft visual c++

sockets - 如何在fiddler中捕获套接字编程的发送和接收请求

visual-c++ - Windows SEH 和内存管理