c++ 父类指针指向子类对象 子类指针指向父类对象
c++ 父类指针指向子类对象 子类指针指向父类对象
#include <iostream>
using namespace std;
//父类(基类)
class A
{
public:
//虚构造函数
virtual void foo()
{
cout << "As foo()" << endl;
bar();
}
//虚构造函数
virtual void bar()
{
cout << "As bar()" << endl;
}
};
//子类(派生类)
class B: public A//公共继承
{
public:
//重写父类中构造函数
void foo()
{
cout << "Bs foo()" << endl;
A::foo();
}
//重写父类中构造函数
void bar()
{
cout << "Bs bar()" << endl;
}
};
int main()
{
//初始化子类对象
B bobj;
//用父类指针指向子类对象
A *aptr = &bobj;
aptr->foo();
cout<<"------"<<endl;
A aobj = *aptr; //重新初始化父类对象
aobj.foo();
cout<<"------"<<endl;
//子类指针指向父类对象,使用强制转换,不安全,一般不会使用
B *bptr =(B*)new A;
bptr->foo();
}
//输出
Bs foo() //子类对象调用子类中构造函数,利用虚函数,实现多态
As foo() //子类中构造函数直接调用父类构造函数
Bs bar() //父类对象直接调用当前对象的构造函数,**注意,由于当前对象为子类对象,故仍然调用子类对象**
------
As foo() //父类对象调用
As bar()
------
As foo() //尽管使用子类指针,但是仍然是父类对象,调用的仍然是父类对象中的构造函数
As bar()
下一篇:
entrySet用法,及Map遍历方法
