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

Niz*_*azo 0 c++ visual-c++

conv.h

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

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

class A {};
class B 
{
public:
    void koko();
};
Run Code Online (Sandbox Code Playgroud)

conv.cpp

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

void Derived::bar()
{
    cout<<"bar shoudn't work"<<endl;
}
void B::koko()
{
    cout<<"koko shoudn't work"<<endl;
}
Run Code Online (Sandbox Code Playgroud)

main.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();
}
Run Code Online (Sandbox Code Playgroud)

输出:

bar shoudn't work
bar shoudn't work
koko shoudn't work
Run Code Online (Sandbox Code Playgroud)

为什么在运行时调用方法栏成功,尽管我创建了一个未派生的Base类?它甚至可以用于两种类型的转换(静态和重新解释转换).

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

Pup*_*ppy 6

未定义的行为可以做任何事情,包括似乎工作.