指向子类的指针调用虚函数

指向子类的指针调用虚函数和调用非虚函数注意事项

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
结论:虚函数是动态绑定的,默认参数是静态绑定的。默认参数的使用需要看指针或者应用本身的类型,而不是对象的类型!