大佬教程收集整理的这篇文章主要介绍了c – 将类更改为其子类,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class Target { public: virtual void do_something() { log_message("NO!"); } }; class TargetChild : public Target { public: virtual void do_something() { log_message("YES!"); } }; class Caller { private: Target target; public: void call_target() { target.do_something(); } void set_target(Target set_target) { target = set_target; } }; int main( int argc,const char* argv[] ) { TargetChild targetChild; Caller caller; caller.call_target(); caller.set_target(targetChild); caller.call_target(); }
日志文件中的结果是“NO!YES!”但它写了NO!两次.我真的不明白它有什么问题.
您可能想要的是包含可以更改的@L_772_8@指针的成员. virtual为您提供@L_772_8@指针,但无法更改.尝试std :: tr1 :: function,boost :: function或C 11 std :: function.
或者,如果您真的想要去虚拟路线,请使用Target *指针.最好使用智能指针类,例如unique_ptr<目标> (再次是Boost / TR1 / C 11)或std :: auto_ptr<目标> (老式的C 03).您也可以使用New和delete自己完成,但是这样的代码并不能真正起作用,并且只适用于一些教育修补.
以上是大佬教程为你收集整理的c – 将类更改为其子类全部内容,希望文章能够帮你解决c – 将类更改为其子类所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。