posts - 0,  comments - 0,  trackbacks - 0
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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理