C++中的多态性

8月 19th, 2012
Visited 4336 times, 1 so far today
0

Comments

                  多态性:即基类指针指向派生类对象,当调用相应基类的方法,执行的却是派生类对象的方法(派生类中复写了基类当中相应调用的方法)。程序中的这种形式,我们叫做多态。但在C++中实现多态时,有一个关键字必不可少。如果没有这个关键字,则想通过基类指针调用派生类的方法时,却只能调用基类本身的方法,并没有产生多态的行为。也就是说只调用了句柄(基类指针或引用所指的对象)的方法,而没有调用句柄所指向的派生类的方法。那么如何才能在C++程序中产生多态呢,我们可以在想产生多态行为的函数前加上关键字visual。这样就可以改变方式,而不再根据句柄的类型决定调用的方法。而是根据句柄所指派生类对象的类型而决定(此时就是多态行为)。只有加上visual的函数才有资格形成多态,否则编译器报错。对于visual的函数我们称为虚函数。派生类可以复写基类中的visual函数,也可以不复写。这取决于相应的应用场合。对于虚函数中,我们还有一种更加特殊的函数,就是纯虚函数了,什么是纯虚函数?就是把已经是visual的函数后面加上等于0的形式。例 visual void print() = 0;    //此函数就是纯虚函数了。纯虚函数的特点就是派生类一定要复写此函数,否则无法实例化对象。原因在于具有这样纯虚函数的类是不完整的类(纯虚函数没有相应的函数定义),这样的类我们也称为抽象类(只要具备一个纯虚函数就是抽象类)。不具有实例化对象的能力。只有派生类复写了纯虚函数,此派生类才能实例化相应的对象。这就是纯虚函数与虚函数的唯一区别所有!总结起来就是纯虚函数一定要复写,而虚函数可以复写,也可以沿用基类当中的实现。

                 visual关键字的特点:只有基类中声明相应的函数为visual函数,即派生类就会继承此visual关键字,即使我们复写相应的函数时并没有指明visual性质,但这种性质依然存在。为了使程序更加清晰可读,我们最好还是在类的各层级当中把他们显示的声明为visual函数。当派生类选择不重写从基类继承而来的visual函数时,派生类就会简单的继承基类当中visual函数的实现。

多态性易错点总结:

            1.将基类指针指向派生类对象,而想通过基类指针调用派生类当中才有的函数时,编译器报错。即使是有多态,基类中还是要有与派生类一致的函数才能产生相应的多态行为。

            2.把基类对象当成派生类对象会导制错误。原因在于派生类”是一个”基类对象,但基类”不是一个”派生类