当前位置: 首页 > 工具软件 > NClass > 使用案例 >

dynamic_cast的使用时是条件的:继承关系,父类必须有虚函数,向下转型。\n\nclass A\n{\npublic:\n\tvirtual void f(){}\npublic:\n\ti

曾瀚昂
2023-12-01

dynamic_cast的使用时是条件的:继承关系,父类必须有虚函数\nclaA\n{\npublic:\n\tvirtual void f(){}\npublic:\n\tint _a = 0;\n};\n\nclass B : public A\n{\npublic:\n\tint _b = 1;\n};\n\n// A*指针pa有可能指向父类,有可能指向子类\nvoid fun(A* pa)\n{\n\t// 如果pa是指向子类,那么可以转换,转换表达式返回正确的地址\n\t// 如果pa是指向父类,那么不能转换,转换表达式返回nullptr\n\tB* pb = dynamic_cast\u003CB*>(pa); // 安全的\n\t//B* pb = (B*)pa;             // 不安全\n\tif (pb)\n\t{\n\t\tcout \u003C\u003C \"转换成功\" \u003C\u003C endl;\n\t\tpb->_a++;\n\t\tpb->_b++;\n\t\tcout \u003C\u003C pb->_a \u003C\u003C \":\" \u003C\u003C pb->_b \u003C\u003C endl;\n\t}\n\telse\n\t{\n\t\tcout \u003C\u003C \"转换失败\" \u003C\u003C endl;\n\t\tpa->_a++;\n\t\tcout \u003C\u003C pa->_a \u003C\u003C endl;\n\t}\n}\n\nint main()\n{\n\tA aa;\n\tB bb;\n\tfun(&aa);\n\tfun(&bb);\n\treturn 0;\n}

 类似资料: