关于面向对象多态的理解

子类对象地址可以赋值给父类指针,可以通过父类指针调用与子类函数名和参数表相同的虚函数,在程序运行时,当父类指针指向父类对象的地址时则调用父类的虚函数,当父类的指针指向子类对象的地址时调用子类的虚函数,让同一条函数语句调用达成不同的结果。

比如学校发通知元旦班级要有人去表演,同学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;

}

关于面向对象多态的理解