子類的函式a中呼叫父類的函式b,函式b中呼叫函式c,子類中存在函式c的覆寫函式d,此時父類的方法會去呼叫子類的實現d。
將總結放在最前面來說明本文的主旨——多型(建議先讀後面兩部分再讀總結),對於子類來講,在子類的方法中呼叫父類的方法methoda,父類的方法中呼叫了子父類同名的方法,這時methoda本質上是被子類呼叫的,那麼在methoda中呼叫的所有方法都應該遵從多型的規則:如果子類覆寫了父類的方法,那麼應該呼叫子類的實現。(c++的很多書中稱子父類為派生類和基類,方法為函式).
以下面的例子,在對全域性函式打樁並需要控制該全域性函式的返回值或者傳入的引數時就需要使用gmock,將其指向乙個mock類的mock方法,為了控制單例,編寫下面的**,在使用per::instance->testmove()時是mockper的例項化物件在執行該方法,因為per是抽象類無法例項化,per的建構函式只會在其子類例項化的時候呼叫,此時per的構造方法是被子類的方法呼叫,那麼此時的this就是子類持有的this
#include
#include
"gtest/gtest.h"
#include
"gmock/gmock.h"
using namespace std;
class per
static per*
instance()
virtual void
testmove
(int type)=0
;protected:
static per* _instance;};
class mockper : public per
;
#include
using namespace std;
class pop
virtual void
res()}
;class per : public pop
void
res()}
;int
main()
public
class
demo
}class
poppublic
void
res()}
class
perextends
pop@override
public
void
res(
)}
物件導向 子類呼叫父類同名屬性和方法
class master object def init self self.kongfu 古法煎餅果子配方 例項變數,屬性 def make cake self 例項方法,方法 print 古法 按照 s 製作了乙份煎餅果子.self.kongfu class school object def ...
C 子類和父類同名成員變數或函式
在c 中子類和父類同名成員時候c 版本不同處理的方式也不同。下面是我使用visual c 2015 update 3的測試結果 測試 如下 include using namespace std class base virtual void print base class public base...
PHP 類繼承 子類和父類同名方法會覆蓋
子類可以訪問父類的成員,繼承關鍵字extends,可以 的重用性,子類中寫了乙個與父類同名的方法,這個方法會覆蓋父類中的方法.1 重用性 2 擴充套件性 3 靈活性 類繼承 person.class.php class person public function say public functi...