很容易忘记多态的概念,因此重新整理了下笔记。先举个例子
有基类:
class Base{
public:
virtual void write(char c) = 0;
virtual void read() = 0;
}
注: =0 的语法表示派生类必须要实现这些函数
有派生类APad, BPad:
class APad : public Base
{
char p;
public:
APad(char s){ p = s; }
~APad(){};
void write(){
std::cout<<"APad write";
}
void read(){
std::cout<<"APad read";
}
}
class BPad : public Base
{
char p;
public:
BPad(char s){ p = s; };
~BPad(){};
void write(){
std::cout<<"BPad write";
}
void read(){
std::cout<<"BPad read";
}
}
现有函数:
void fun(Base& a){
a.write();
a.read();
}
当使用函数fun时:
int main(int argc, char* argv[])
{
APad apad(‘a’);
BPad bpad(‘b’);
fun(apad);
fun(bpad);
}
结果输出:
APad writeAPad read BPad writeBPad read
对于函数fun(), 它根本不知道派生类的存在,只知道Base,但是对于派生类也能很好的工作,子类可以转换成基类使用
多态:在基类中定义虚函数,由子类各自对函数进行实现,其它函数( 如fun() )调用时可以通过基类的虚函数来实现调用。
转载于:https://blog.51cto.com/tracey2076/506671