您的位置:首页 > 编程语言 > C语言/C++

c++ 父类指针如何操作子类的新函数

2016-10-20 19:50 429 查看
父类指针无法直接调用子类的新函数,需要转换为子类的指针后方可调用。

  C++编译器在编译的时候是做静态类型分析。也就是说,你的父类指针是否真的指向一个子类类型,编译器并不会做这个假设。所以你用父类指针去调用子类的函数是无法被识别的。这里提供一种不安全和一种安全的转换方式可以实现该功能:

  假设我们有父类和子类的定义如下:
  1. 强制转换(不安全)
  这里之所以说不安全是因为转换的时候无法得知是否转换成功。编译器强制把d当成Derived类型去使用。比如说b本来是真的指向Base而不是Derived类型那么强制转换后调用Derived的NewFunc可能会导致程序崩溃。

  2.动态转换,dynamic_cast(安全)
  dynamic_cast是在运行时去做转换而非编译时,所以它可以给出是否转换成功的信息。如果转换不成功则返回NULL。所以可以判断转换结果是否为NULL来决定是否能使用该指针不会导致程序崩溃

  dynamic_cast参考:

  http://baike.baidu.com/link?url=MFk9AusANTH86IWBNVk-2zzztggrvbnlpW8T1MsT8aCUhtIv7SWBxgCa6qryivPJLkgdcJz2ULBl2QCzK8CK6a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++
相关文章推荐