随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

虚函数的使用

读下列程序:
#include<iostream>
using namespace std;

class B0
{
    
public:
    
virtual void print()
    
{
        cout
<<"B0::print()"<<endl;
    }

}
;
class B11:public B0
{
    
public:
    
virtual void print()
    
{
        cout
<<"B11::print()"<<endl;
    }

}
;
class B12:public B0
{
    
public:
    
virtual void print()
    
{
        cout
<<"B12::print()"<<endl;
    }

}
;
class B2:public B0
{
    
public:
    
virtual void print()
    
{
        cout
<<"B2::print()"<<endl;
    }

}
;
int main()
{
    B0 b0,
*p;
    B11 b11;
    B12 b12;
    B2 b2;
    
int i;
    cout
<<"Input i(0,11,12,2,else ending!):";
    cin
>>i;
    
while(i==0||i==11||i==12||i==2)
    
{
        
switch(i)
        
{
            
case 0:  p=&b0;
                     
break;
            
case 11: p=&b11;
                     
break;
            
case 12: p=&b12;
                     
break;
            
case 2:  p=&b2;
                     
break;
        }

        p
->print();
        cout
<<"Input i(0,11,12,2 else ending!):";
        cin
>>i;
    }

    
return 0;
}

结果显示:
Input i(0,11,12,2,else ending!): 2
B2::print()
Input i(0,11,12,2,else ending!):11
B11::print()
Input i(0,11,12,2,else ending!):12
B12::print()
Input i(0,11,12,2,else ending!):
B0::print()
Input i(0,11,12,2,else ending!):3
press anykey to continue

解析:
动态联编是与虚函数以及程序中使用指向基类的指针(变量)密切相关的。注意,C++规定,基类指针可以指向其派生类的对象
(即可将派生类对象的地址赋给其基类指针变量),但反过来不可以。允许基类指针指向其派生类对象--这一点正是函数超载及
虚函数用法的基础。本范例程序中,说明了一个纸箱基类的指针p,而后通过"p= 某派生类的类对象地址;"使p指向了不同的
派生类,再接着使用"p->print();"去对虚函数print()进行调用,系统将视基类指针p所指对象的不同而调用不同类的print。

posted on 2009-08-21 19:26 八路 阅读(509) 评论(0)  编辑 收藏 引用 所属分类: 学习笔记C++ 类


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理