qfedu-cpp-level/day7/d16.cpp

72 lines
1.1 KiB
C++
Raw Normal View History

2023-08-01 18:51:53 +08:00
// 动态类型转换
#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;
}