// 动态类型转换
#include <iostream>

using namespace std;

class A
{
protected:
    int x;

public:
    A(int x) : x(x) {}
    void show()
    {
        cout << "A x = " << x << endl;
    }
};

class B : public A
{
public:
    B(int x) : A(x) {}
    void print()
    {
        cout << "B print x = " << x << endl;
    }
};

class C
{
};

void test1()
{
    int a = 65;
    // 动态转化不支持基本数据类型之间的转换
    // char c = dynamic_cast<char>(a);
    // char *c = dynamic_cast<char *>(&a);
    // cout << "c = " << c << endl;
}

void test2()
{
    A a1 = A(10);
    B b1 = B(20);

    // 上行转换
    A &a2 = dynamic_cast<A &>(b1);
    a2.show();
    // a2.print(); // 不存在 print 成员函数
    b1.print();

    // 下行转换: 动态转换不支持（安全）
    // B &b2 = dynamic_cast<B &>(a2);
    // b2.print();
    B &b3 = static_cast<B &>(a2);
    b3.print();
}

// 不相关类型的转换: 不可动态转换
void test3()
{
    A *a = new A(20);
    // C *p = dynamic_cast<C *>(a);
}

int main()
{
    test3();
    return 0;
}
