指向子类的指针调用虚函数
指向子类的指针调用虚函数和调用非虚函数注意事项
1、如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)
2、基类指针指向子类对象调用虚函数
class A
{
public:
virtual void foo()
{
cout << “A’s foo()” << endl;
}
};
class B: public A
{
public:
void foo()
{
cout << “B’s foo()” << endl;
}
};
int main()
{
B bobj;
A *aptr = &bobj;
aptr->foo();
}
输出:“B’s foo()”
结论:虚函数是动态绑定
3、基类指针指向子类对象调用虚函数(带默认参数)
class Base
{
public:
virtual void fun ( int x = 10 )
{
cout << "Base::fun(), x = " << x << endl;
}
};
class Derived : public Base
{
public:
virtual void fun ( int x=20 )
{
cout << "Derived::fun(), x = " << x << endl;
}
};
int main()
{
Derived d1;
Base *bp = &d1;
bp->fun();
return 0;
}
输出:Derived::fun(), x = 10
结论:虚函数是动态绑定的,默认参数是静态绑定的。默认参数的使用需要看指针或者应用本身的类型,而不是对象的类型!