1、指引或者引用的向上转换,向下转换
例如基类Father ,Son继承Father,派生类Son.。Father—>Son则为向下转换,Son—>Father则为向上转换。向上转换为隐士转换,向下转换需要dynamic_cast或者c的转换方式。
向上转换:
struct Father { //基类Father }; struct Son:Father { //基类Father的派生类B }; //1.普通指针转换 Son *son = new Son; //派生类Son向上转换为基类Father Father *father = son; //2.智能指针转换 std::shared_ptr<Father> father(new Son(son));
此时son就是向上转换。无需显式转换既可以编译通过。
2、dynamic_cast
一般用于有继承关系的类之间的向下转换。
3、dynamic_pointer_cast
当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。
向下转换(含智能指针):
struct Father { //基类Father }; struct Son:Father { //基类Father的派生类B }; std::shared_ptr<Father> father; std::shared_ptr<Son> son = std::dynamic_pointer_cast<Son>(father);
戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。 |