c++有父类引用指向子类对象(面向对象的重要特点之一,java里是这样的!)
#include<iostream.h>
class Father
{
public:
Father()
{
f = 1;
}
void print()
{
cout<<"f = "<<f<<endl;
}
public:
int f;
};
#include<iostream.h>
#include "Father.cpp"
class Son : public Father
{
public:
Son():Father()
{
s = 2;
}
void print()
{
cout<<"s = "<<s<<endl;
}
public:
int s;
};
int main()
{
Son s;
s.print();//输出s = 2
Father& f = s;//这里如果直接用值,就是把“&”去掉,即使使用virtual也不会调用子类的方法,原因待解!
f.print();//输出父类 f=1
f = s;//父类引用指向子类对象
f.print();//这里输出 f = 1;和java不一样,java里面则直接调用子类的方法,但是这里不是,这里调用的还是父类的,要让其自动调用子类的方法则需要将方法设置为虚函数,加关键字virtual
((Son&)f).print();//强制转换,输出 s = 2
return 0;
}