C++ 之 虚函数、多态
2014-09-15 18:05
239 查看
一共三个文件 main.cpp Person.h Person.cpp
Person.h
Person.cpp
main.cpp
运行结果:
我是普通人
我是普通人
我是普通人
上面程序,用父类的指针指向子类对象之后,执行的依然是父类的方法。如果要执行的是子类自身的方法,要怎么办呢?
我们只需修改Person.h
运行结果:
我是普通人
我是一名学生
我是一名工人
只需把父类的say()方法声明为虚函数,虚函数的意思就是这个方法可以被子类重写,当子类重写了父类这个方法,父类指针指向子类对象的时候,执行的方法就是子类自身的方法了,这样就可以很好实现多态。
Person.h
#include <iostream> using namespace std; class Person{ public: void say(); }; class Student: public Person{ public: void say(); }; class Worker: public Person{ public: void say(); };
Person.cpp
#include "Person.h" void Person::say(){ cout << "我是普通人" << endl; } void Student::say(){ cout << "我是一名学生" << endl; } void Worker::say(){ cout << "我是一名工人" << endl; }
main.cpp
#include "Person.h" #include <iostream> using namespace std; void sayWho(Person * p){ p->say(); } int main(){ auto pen = new Person(); auto stu = new Student(); auto wor = new Worker(); sayWho(pen); sayWho(stu); sayWho(wor); system("pause"); return 0; }
运行结果:
我是普通人
我是普通人
我是普通人
上面程序,用父类的指针指向子类对象之后,执行的依然是父类的方法。如果要执行的是子类自身的方法,要怎么办呢?
我们只需修改Person.h
//void say(); virtual void say();
运行结果:
我是普通人
我是一名学生
我是一名工人
只需把父类的say()方法声明为虚函数,虚函数的意思就是这个方法可以被子类重写,当子类重写了父类这个方法,父类指针指向子类对象的时候,执行的方法就是子类自身的方法了,这样就可以很好实现多态。
相关文章推荐
- C++ 虚函数 多态
- C++对象布局及多态实现探索之虚函数调用
- C++通过虚函数实现多态
- C++虚函数和多态学习笔记
- C++ 虚函数 多态
- C++虚函数和多态学习笔记
- C++ 虚函数 多态
- C++ 虚函数 多态
- C++特性探寻-多态和虚函数
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- C++ 虚函数 多态
- C++对象布局及多态实现之带虚函数的类
- 读书笔记-Thinking in C++-第15章 多态和虚函数
- 搞清楚C++继承、多态、虚函数、纯虚函数
- C++ 虚函数 多态
- C++ 虚函数 多态
- C++虚函数和多态
- C++特性探寻-多态和虚函数
- C++ 虚函数与多态
- 详解C++中的多态、虚函数、父类子类