i'm wondering why this code works properly, i was convinced that casting wrong class would result in crash.
#include <iostream>
using namespace std;
class Base {
public:
    void MainFunc() {
        cout << "MainFunc called.\n";
    }
};
class DerivedOne : public Base {
public:
    void FirstDerived() {
        cout << "FirstDerived called.\n";
    }
};
class DerivedTwo : public Base {
public:
    void SecondDerived() {
        cout << "SecondDerived called.\n";
    }
};
int main() {
    Base* classesArray[2];
    classesArray[0] = new Base();
    classesArray[1] = new DerivedOne();
    ((DerivedTwo*)classesArray[1])->SecondDerived();
}
Is it okay to cast wrong derived class?
