1、如果你以一个"基类之指针"指向一个"派生类之对象",那么经由该指针你只能调用该基类所定义的函数
2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit cast),这种作法很危险。
2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit cast),这种作法很危险。
3、如果基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定,这与第1点其实意义相通。
class A
{
public:
virtual void f1()
{
cout<<1;
}
void f2()
{
cout<<2;
}
};
class B:public A
{
public:
int i;
void f1()
{
cout<<3;
}
void f2()
{
cout<<4;
}
};
int main()
{
B* pB;
A a;
pB=(B*)&a;
pB->f1 ();//这个虚函数,是回调的基类的
pB->f2();//派生类对象不存在,竟然还可以调用派生类的函数
//pB->i = 5;
return 0;
}