为什么C++世界要虚函数以及纯虚函数,然后用父类指针指向子类?反正怎么都需要先创建子类实例对象,为何不直接使用这个子类对象,而要多此一举先赋给父类指针,再使用?
答案是 —— 为了软件模块化和程序员协作的独立性,也称解耦合。
举个例子
1)我手握一个父类指针,指向一个对象,不关心具体指向了什么对象,我只管用它调用约定好的接口(虚函数), 那我的编译就是独立的了,我可以不用等别人的代码ready,就能自由写我的代码了。
2)你写了一个子类实现这个接口,并把子类实例化对象扔给我的父类指针。你的编译也是独立的了
3)他也写一个子类实现这个接口,也把子类实例化对象扔给我的父类指针。他的编译也是独立的了
那么链接的时候,2)和3)谁后链接上,就挤掉了对方,抢占了父类指针。看下面的代码
接口定义:
1 | //==========farther.h========== |
我的代码,主控
1 | //==========main.cpp========== |
你的代码,实现一个子类
1 | //==========sone_1.cpp========== |
他的代码,实现另一个子类
1 | //==========sone_2.cpp========== |
联调
1 | $ g++ main.o farther.o son_2.o son_1.o -o main |
可见解耦效果明显,大家都可以愉快地并行开发。
但是实际上这种联调方式不会在实际中发生,因为要用新功能son_2直接别链接son_1就完事了
1 | $ g++ main.o farther.o son_2.o -o main |
不过,也有一种情况,是我需要顺序执行所有新老功能,那可以这么做:
1 | //把接口中sonPtr改成vector以允许功能堆叠 |
以上。
Be the first person to leave a comment!