父类子类指针相互转换问题
2016-11-30 10:41
459 查看
文章转载自 http://www.cnblogs.com/mu-tou-man/p/3925433.html
父类子类指针相互转换问题
1.当自己的类指针指向自己类的对象时,无论调用的是虚函数还是实函数,其调用的都是自己的:2.当指向父类对象的父类指针被强制转换成子类指针时候,子类指针调用函数时,只有非重写函数是自己的,虚函数是父类的;
3.当指向子类对象的子类指针被强制转换成父类指针的时候,也就是父类指针指向子类对象,此时,父类指针调用的虚函数都是子类的,而非虚函数都是自己的;
将上面三句话总结成一句话就是:当父类子类有同名非虚函数的时候,调用的是转换后的指针类型的函数;
当父类子类有同名虚函数的时候呢,调用的是指针转换前指向的对象类型的函数。
详见以下代码:
#include <iostream>
using namespace std;
class Base {
public:
virtual void f() { cout << "Base::f" << endl; }
virtual void g() { cout << "Base::g" << endl; }
void h() { cout << "Base::h" << endl; }
};
class Derived:public Base
{
public:
virtual void f(){cout<<"Derived::f"<<endl;}
void g(){cout<<"Derived::g"<<endl;}
void h(){cout<<"Derived::h"<<endl;}
};
void main()
{
Base *pB=new Base();
cout<<"当基类指针指向基类对象时:"<<endl;
pB->f();
pB->g();
pB->h();
cout<<endl;
Derived *pD=(Derived*)pB;
cout<<"当父类指针被强制转换成子类指针时:"<<endl;
pD->f();
pD->g();
pD->h();
cout<<endl;
Derived *pd=new Derived();
cout<<"当子类指针指向子类时候"<<endl;
pd->f();
pd->g();
pd->h();
cout<<endl;
Base *pb=(Base *)pd;
cout<<"当子类指针被强制转换成父类指针时:"<<endl;
pb->f();
pb->g();
pb->h();
cout<<endl;
Base *pp=new Derived();
cout<<"父类指针指向子类对象时候:"<<endl;
pp->f();
pp->g();
pp->h();
cout<<endl;
}
相关文章推荐
- 【转】父类子类指针相互转换问题
- 父类子类指针相互转换问题
- 父类子类指针相互转换问题
- c++ 父类指针转换为子类指针后调用子类的成员函数问题
- C++学习——父类指针和子类指针的步长问题
- C#中 父类与子类相互强制转换之实验
- 使用dynamic_cast将子类转换为父类指针时,结果可能为NULL
- 子类指针不能转换为父类指针???
- C++多重继承子类和父类指针转换过程中的一个易错点
- 关于继承(子类对象与父类对象【相互转换】的过程)
- 【c#】ORM,字段验证,父类,子类相互转换,wpf绑定
- 子类和父类的相互转换
- java学习笔记:java的多态,子类和父类的相互转换,父类引用指向子类的对象
- 子类、父类相互调用构造器和成员方法问题
- C#中 父类与子类相互强制转换之实验
- 父类和子类之间的转换问题
- 子类对象向父类对象转换的相关问题解析
- 父类转换为子类的成员问题
- C#中子类与父类的相互转换
- 关于int类型指针和char类型指针相互转换问题