子类的函数A中调用父类的函数B,函数B中调用函数C,子类中存在函数C的覆写函数D,此时父类的方法会去调用子类的实现D。
总结
将总结放在最前面来说明本文的主旨——多态(建议先读后面两部分再读总结),对于子类来讲,在子类的方法中调用父类的方法MethodA,父类的方法中调用了子父类同名的方法,这时MethodA本质上是被子类调用的,那么在MethodA中调用的所有方法都应该遵从多态的规则:如果子类覆写了父类的方法,那么应该调用子类的实现。(C++的很多书中称子父类为派生类和基类,方法为函数).
以下面的例子,在对全局函数打桩并需要控制该全局函数的返回值或者传入的参数时就需要使用gmock,将其指向一个Mock类的Mock方法,为了控制单例,编写下面的代码,在使用Per::instance->TestMove()时是MockPer的实例化对象在执行该方法,因为Per是抽象类无法实例化,Per的构造函数只会在其子类实例化的时候调用,此时Per的构造方法是被子类的方法调用,那么此时的this就是子类持有的this
#include <iostream>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
using namespace std;
class Per
{
public:
Per() {
_instance = this; }
static Per* instance() {
return _instance; }
virtual void TestMove