OO的bug,C 的bug,還是編譯器的bug

2021-04-16 05:31:11 字數 1087 閱讀 7855

oo的

bug,c++

的bug,

還是編譯器的

bug?

按照物件導向的理論派生類可以直接繼承基類的公有方法.例如

: class base

};class derive: public base

; 現在類derive就自然而然的有了乙個void fun(const int& arg)的方法.這個方法就是從類base繼承而來的.然而這一卻在引入模板後就變的混挑亂不堪了.請看下面這兩個類.

class base

};class derive: public base

; 這次類base有乙個成員模板函式template

void fun(const

int& arg),按照oo的理論,類derive也自然有這個成員模板函式.那麼好吧.我們就來特化類derive的這個成員模板函式.於是我們寫下了乙個這樣的特化:

template

<>

void derive::fun< int > (const

int& arg)

然而這個特化卻不能被編譯器支援.在g++中會有編譯錯誤,說

」derive

中沒有函式fun」.

類derive不是從類base中繼承了函式fun了嗎?

在vc中倒是能編譯通過,但卻會有乙個非常奇怪的執行結果.為了看到個結果我們來讓類base的fun函式輸出它的函式名,同時我們也讓特化後的類derive的fun也輸出函式名.改完後的**如下:

class base

};class derive: public base ;

template

<>

void derive::fun< int > (const

int& arg)

下面我們來測試這些**. 測試如下:

derive obj;

obj.fun(8);

obj.fun(8.8);

輸出結果有點出人意料.這個測試的輸出如下:

base::fun

base::fun

竟然兩個fun:特化的和非特化的都是類base的. 我們明明是特化的類derive的fun呀.

OO的bug,C 的bug,還是編譯器的bug

oo的 bug,c 的bug,還是編譯器的 bug?按照物件導向的理論派生類可以直接繼承基類的公有方法.例如 class base class derive public base 現在類derive就自然而然的有了乙個void fun const int arg 的方法.這個方法就是從類base繼...

OO的bug,C 的bug,還是編譯器的bug

oo的 bug,c 的bug,還是編譯器的 bug?按照物件導向的理論派生類可以直接繼承基類的公有方法.例如 class base class derive public base 現在類derive就自然而然的有了乙個void fun const int arg 的方法.這個方法就是從類base繼...

TortoiseSVN還是有Bug的

這兩天又為svn出現bug而浪費了不少時間 現象就是使用update或者check out之後出現working copy lock的問題,雖然提示用clean up命令可以修復,但是結果還是不行,始終提示cleanup failed。在這個沒辦法的情況下,看來只有刪除整個工程的svn庫才能解決問題...