关于面向对象多态的理解
子类对象地址可以赋值给父类指针,可以通过父类指针调用与子类函数名和参数表相同的虚函数,在程序运行时,当父类指针指向父类对象的地址时则调用父类的虚函数,当父类的指针指向子类对象的地址时调用子类的虚函数,让同一条函数语句调用达成不同的结果。
比如学校发通知元旦班级要有人去表演,同学A可以代表我们班去表演,同学B也可以,也可以整个班一起上去表演,代码和结果如下。
#include <stdlib.h>
#include <iostream>
class MyClass {
public:
virtual void play() {
std::cout << "全班同学一起表演" << std::endl;
}
};
class StudentA : public MyClass {
public:
virtual void play() {
std::cout << "同学A表演" << std::endl;
}
};
class StudentB : public MyClass {
public:
virtual void play() {
std::cout << "同学B表演" << std::endl;
}
};
void whoPlay(MyClass &c) {
c.play();
}
int main() {
MyClass c, *pC;
StudentA a;
StudentB b;
// 全班一起去表演
pC = &c;
pC->play();
// 同学代表班级A去表演
pC = &a;
pC->play();
// 同学代表班级B去表演
pC = &b;
pC->play();
system("pause");
return 0;
}