dynamic_cast的使用时是条件的:继承关系,父类必须有虚函数,向下转型。\n\nclass A\n{\npublic:\n\tvirtual void f(){}\npublic:\n\ti
/ 不安全\n\tif (pb)\n\t{\n\t\tcout \u003C\u003C \"转换成功\" \u003C\u003C endl;\n\t}\n\telse\n\t{\n\t\tcout \u003C\u003C \"转换失败\" \u003C\u003C endl;
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}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)