43 lines
866 B
C++
43 lines
866 B
C++
// 静态类型转换
|
|
#include <iostream>
|
|
#include <cstring>
|
|
#include <cstdlib>
|
|
|
|
using namespace std;
|
|
|
|
class A
|
|
{
|
|
public:
|
|
int x;
|
|
A(int x) : x(x) {}
|
|
};
|
|
|
|
class B : public A
|
|
{
|
|
public:
|
|
int y;
|
|
B(int x, int y) : A(x), y(y) {}
|
|
};
|
|
|
|
int main()
|
|
{
|
|
A *a = new A(5);
|
|
B *b = new B(10, 20);
|
|
|
|
A *c = static_cast<A *>(b); // 静态上行转换,子类指针向父类指针转换
|
|
// cout << "a.x = " << a->x << endl;
|
|
// cout << "b.x = " << b->x << ", b.y = " << b->y << endl;
|
|
// cout << "b = " << b << endl;
|
|
// cout << "c = " << c << endl;
|
|
// cout << "c.x = " << c->x << endl;
|
|
|
|
// B *b2 = static_cast<B *>(a); // 下行转换,父类指针向子类指针转换
|
|
// B *b2 = (B *)a; // 强制下行转换,不安全
|
|
// cout << "b2.x = " << b2->x << ", b2.y = " << b2->y << endl;
|
|
|
|
delete a;
|
|
delete b;
|
|
|
|
return 0;
|
|
}
|