C 類呼叫關係沒有virtual就是編譯期確定

2021-08-07 13:38:48 字數 739 閱讀 7070

class a

int main()

1.只有指標和引用才能誘發虛函式機制。所以

(1)a

(2)b

2.只有虛函式機制,才會出現繼承中,呼叫子類的函式的性質。

(3)b

(4)b

否則,全部都是在編譯期確定下來。具體看下面例子

class a

};class b:public a

};void fun2(a *a)

int main()

1.上述所有表示式都是編譯期就確定會怎樣執行的。

2.只要是a定義的物件(a *a=new b),都以a裡的函式來執行

(1)a

(2)a:如果想要執行b的fun,只能自己強制型別轉換

(3)a:因為在編譯期就已經決定呼叫a裡面的fun了。不會呼叫子類(如果有fun3()),因為不是virtual

3.b定義的物件也是要聽編譯期的

(4)b

(5)a:因為引數是a,想要用b要型別轉換

(6)a

對這個(6)情況要說明一下,編譯期就已經要呼叫a的fun了,不存在子類重寫父類函式這種說法。

如果上面b類中不要注釋 fun() 函式,就會呼叫b的fun(),還是因為編譯期決定。

關於 類的 virtual 例項 說明 (c )

using system using system.collections.generic using system.text public class classboy classfather public class classgirl classfather endregion region ...

C 呼叫C 的類

這裡講c 呼叫c 的類,也是我真正想要的做的。網上關於這方面的知識挺雜,我折騰了好久終於搞定了。大致有兩種方法。第一種c 直接調,用到system.runtime.interopservices中的marshal類,貌似這樣可能通過直接操縱記憶體來實現呼叫,但我沒有嘗試 第二種方法是用managed...

繼承關係類例項物件的非繫結關係方法呼叫

class a object def f self print a f class b a def f self a.f self a a b b a.f b.f a.f a b.f b print a.f b print b.f a 結果 a f a fa f a f a f traceback ...