class BaseFoo {
public:
BaseFoo() {}
};
class ChildFoo :public BaseFoo {
public:
string m_name = "Name of ChildFoo";
ChildFoo() {
cout << "ChildFoo constructed\n";
}
void print() {
cout << "I am ChildFoo\n" << m_name << endl;
}
};
class ChildFoo2 :public BaseFoo {
public:
ChildFoo2() {
cout << "ChildFoo constructed\n";
}
void print() {
cout << "I am ChildFoo\n" << endl;
}
};
#include <vector>
int main()
{
//1#
BaseFoo* base = new BaseFoo();
//父类对象转子类对象,不安全
//子类没有实例化,调用子类方法不报错,因为子类方法中不含子类的变量
static_cast<ChildFoo2*>(base)->print();
//1#
//2#
ChildFoo* child = new ChildFoo();
//子类转父类安全
BaseFoo* base_1 = static_cast<BaseFoo*>(child);
//父类对象转子类对象,不安全
//子类已经实例化,子类方法中含有子类的变量,调用子类方法不报错,
static_cast<ChildFoo*>(base_1)->print();
//2#
//3#
BaseFoo* base_2 = new BaseFoo();
//父类对象转子类对象,不安全
//Release报错,Debug乱码,因为 m_name 是ChildFoo的成员,而 ChildFoo 没有实例化
static_cast<ChildFoo*>(base_2)->print();
//3#
}
static_cast 父类子类互转情况(见代码注释)
最新推荐文章于 2024-03-06 22:45:15 发布