基类指针转换为子类指针,子类指针转换为基类指针
来源:互联网 发布:金融网络销售靠谱吗 编辑:程序博客网 时间:2024/04/30 15:19
#include<iostream>#include<typeinfo>using namespace std;class base{ public: virtual void virtual_fun() {cout<<"base"<<endl;} void normal_fun() {cout<<"base"<<endl;}};class derived{ public: virtual void virtual_fun() {cout<<"derived"<<endl;} void normal_fun() {cout<<"derived"<<endl;} };int main(){ base *cp=(base *)new derived; cp->virtual_fun(); cp->normal_fun(); derived *dp=(derived *)new base; dp->virtual_fun(); dp->normal_fun();}
程序运行结果:
derived
base
base
derived
由此可得:
(1) 基类指针=(基类指针类型)new 派生类;
该指针调用虚函数时,调用派生类的虚函数。(多态)
调用非虚函数,调用的是基类的函数。
(2) 派生类指针=(派生类指针类型)new 基类;
调用虚函数时,调用基类的虚函数。
调用非虚函数,调用的是派生的函数。
总结:
在继承层次中,存在向上指针类型转换或者向下类型转换,则调用成员函数(两个类都实现了)调用的是哪个类的函数,遵循下面2个规则:
(1)调用虚函数时,因为是动态绑定,所以根据指针指向的对象的实际类型来决定。
(2)调用非虚函数,静态决定,所以根据表面山看到的类的类型来决定。
- 基类指针转换为子类指针,子类指针转换为基类指针
- 基类指针转换为子类指针,子类指针转换为基类指针(转载)
- 子类指针不能转换为父类指针???
- 父类指针强制转换为子类指针
- c++ 父类指针转换为子类指针后调用子类的成员函数问题
- 基类指针+子类指针问题
- 父类子类指针相互转换问题
- 父类子类指针相互转换问题
- 使用dynamic_cast将子类转换为父类指针时,结果可能为NULL
- 父类指针向子类指针的强制类型转换
- 父类指针向子类指针的强制类型转换
- c++父类指针和子类指针相转换:
- 继承中派生类指针转换为基类指针
- 父类指针,子类指针
- 关于c++指向子类的基类指针,与指向子类的子类指针
- 基类指针和子类指针相互赋值
- 基类指针与子类指针的比较
- 基类指针和子类指针相互赋值
- 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度
- 清除WebSphere中缓存
- 机房收费系统之关系图
- Tiny4412中配置Camera接口时钟
- 简单的题目4
- 基类指针转换为子类指针,子类指针转换为基类指针
- 封装,capsulation,&&继承,Inheritance,&&多态,polymorphism
- hdu 2159 FATE
- 无限的路_hdu_2073(AC).java
- MFC,进入主对话框时,首先打开登录对话框
- android使用隐藏api的方法(使用被@hide的api)
- OC中的变量总结
- hdu1233 Prime算法和 Kruskal算法
- 苹果 Macbook Pro 系列 MB MC MD ME