C 缺陷之作用域運算子

2021-08-29 04:32:54 字數 515 閱讀 3775

c++使用::運算子搞定很多東西,其中最基本的乙個用處就是用來決議多繼承中的重名成員。::運算子的本質是:左運算元是乙個scope,右運算元是這個scope內的名字,可以是scope,class,member或者function,variable等等,從左運算元指定的scope中找到有運算元這個實體。看起來非常優雅,不是麼?可是,它有好幾個缺陷。

一、現實的常見的缺陷。分散在**中,一旦改變會引起很多地方同時都需要改。其實這就是決策不能集中作出的乙個典型現象。

二、理論上的缺陷一。它喪失了虛擬性也就是多型性。這個問題說小也**大也大,如果你就想靜態呼叫,那麼ok,非常好。如果我們需要多型性,那麼對不起,不可能了。但是對於虛函式,我們一般期待的多型性。

三、理論上的缺陷二。它主要體現在using語句中,我們知道,using可以引入乙個名字,乙個別的scope(主要是命名空間)中的名字,當然,也可以在子類中引用父類的名字以改變訪問級別。這個行為的乙個缺陷是引入了所有overload的名字,你不能引入部分實體。這在實踐中一般沒有問題,但是,一旦有了問題就非常難繞開。

C 之作用域運算子

c 使用 運算子搞定很多東西,其中最基本的乙個用處就是用來決議多繼承中的重名成員。運算子的本質是 左運算元是乙個scope,右運算元是這個scope內的名字,可以是 scope,class,member或者function,variable等等,從左運算元指定的scope中找到有運算元這個實體。看起...

C 作用域運算子( )

是c 裡的 作用域運算子 比如宣告了乙個類a,類a裡宣告了乙個成員函式void f 但沒有在類的宣告裡給出f的定義,那麼在類外定義f時,就要寫成void a f 表示這個f 函式是類a的成員函式。一般還有一種用法,就是直接用在全域性函式前,表示是全域性函式。當類的成員函式跟類外的乙個全域性函式同名時...

C 作用域運算子

c 作用域運算子是c 運算子中等級最高的。運算子的本質是 左運算元為域,是乙個scope,右運算元是這個scope中的乙個名字,它可以是乙個scope class member function或者variable等。google style對域作用符的建議和說明可參考 的作用主要包括以下三種 後兩...