C++多态演示
时间:2010-11-23 来源:秩名
初学者对于多态的概念总是理解不清楚,一下通过几个实例在理解多态。
多态描述的是使用基类的指针或引用操作多个类型的能力。
我们知道,子类的指针是可以隐式转化为父类的,所以我们在进行程序设计的时候如果要对一个未知的类型进行处理,可以在方法声明时把参数的类型声明为父类的指针。
这要我们就是实现了根据传入的类型执行不同的方法。这里的关键是子类在重写父类的虚方法时是在虚方法表的相应位置对父类虚方法实现覆盖。
举个例子:
头文件classFile.h:
#ifndef classFile_Header_File
#define classFile_Header_File
class father
{
public:
virtual void show();
};
class son: public father
{
public:
void show();
void sayhi();
};
#endif
这里我们在子类中对父类实现了override(C++没有提供override关键字,所以改写父类的方法要格外小心)。
TestPoly.cpp代码如下:
#include<iostream>
#include"classFile.h"
using namespace std;
void hello(father* fp)
{
fp->show();
}
int main()
{
father f;
hello(&f);
son s;
hello(&s);
}
inline void father::show()
{
cout<<"I am father"<<endl;
}
inline void son::show()
{
cout<<"I am son"<<endl;
}
inline void son::sayhi()
{
cout<<"Hi, I am son"<<endl;
}
这里,传入父类的指针将调用father::show(),传入子类的指针时,虽然进行了隐式的类型转化,但是由于子类在其继承的虚方法表中相应的位置覆盖了父类的show()方法,所用调用的实际上son::show()的内容。此时子类的方法表中不存在father::show()了,如果我们把virtual关键字去掉,那么father::show()和son::show()将同时存在与子类的方法表中。
标签分类: C++