using namespace std;
class Base
{
public:
void no_virtual()
{
cout<< "no_virtual in Base" <<endl;
}
virtual void has_virtual()
{
cout<< "has_virtual in Base"<<endl;
}
};
class Derived: public Base
{
public:
void no_virtual()
{
cout<< "no_virtual in Derived"<<endl;
}
virtual void has_virtual()
{
cout<< "has_virtual in Derived"<<endl;
}
};
int main()
{
Base *base = new Derived();//base 是Base类型,但是它指向的类型编译器不知道
base->no_virtual(); // Base->no_virtual //函数调用是依据指针本身的类型来调用相应的函数,而非指针所指向的类型
base->has_virtual(); // Derived->has_virtual 这里has_virtual 是虚函数,进行晚绑定,调用的是Derived::has_virtual
Base base2;
Derived *derived = static_cast<Derived *>(&base2); //这是downcast
derived->no_virtual(); // derived 本身是 Derived指针,所以调用的是 Derived::no_virtual
derived->has_virtual(); // derived 指向的是Base ,虚函数进行晚绑定, 调用Base::has_virtual
return 0;
}
posted on 2010-08-01 09:33
24小时精神 阅读(58)
评论(0) 编辑 收藏 引用