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++编译器在编译的时候是做静态类型分析。也就是说,你的父类指针是否真的指向一个子类类型,编译器并不会做这个假设。所以你用父类指针去调用子类的函数是无法被识别的。这里提供一种不安全和一种安全的转换方式可以实现该功能:
假设我们有父类和子类的定义如下:
2.动态转换,dynamic_cast(安全)
dynamic_cast参考:
http://baike.baidu.com/link?url=MFk9AusANTH86IWBNVk-2zzztggrvbnlpW8T1MsT8aCUhtIv7SWBxgCa6qryivPJLkgdcJz2ULBl2QCzK8CK6a
相关文章推荐
- c++ 父类指针转换为子类指针后调用子类的成员函数问题
- C++中指向子类的父类指针访问父、子类成员时的权限和函数隐藏规则
- C++父类子类中虚函数的使用
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- C++中子类如何调用不同父类中的同名函数?
- 父类指针如何访问子类数据成员变量
- C++ 子类函数对父类同名函数的覆盖
- 不知道子类成员函数的情况下,用父类方法调用子类的成员函数指针,需增加/vmg命令
- C++中如何在main()函数之前执行操作?
- C++中子类如何调用不同父类中的同名函数?
- 面试题:C++中如何在main()函数之前执行操作?
- C++析构函数的自动调用(析构函数必须是虚拟的,这样删除父类指针指向的子类对象,才能同时调用两者的析构函数,否则就没有机会调用子类析构函数)
- C++ 类的继承,子类以及之类的对象 对父类成员函数的访问权限
- C++关于父类指针指向子类对象的问题
- 在c#中如何提供c/c++中的函数指针的功能
- c++中父类的静态成员变量/函数在子类中的使用
- 用 c 语言实现类的继承,并且可用父类指针操作子类对像的一个测试例子
- c++子类能从父类中继承父类的静态成员函数吗
- c++ builder\delphi中如何改变操作数据库时的鼠标指针形状
- c++父类指针强制转为子类指针后的测试(帮助理解指针访问成员的本质)(反多态)