以前學習c語言的時候,變數的作用域分為塊作用域、檔案作用域、函式作用域以及函式原型作用域,而在c++中,增加了類的
概念,今天我們來討論一下類的作用域:全域性作用域、類作用域、塊作用域。
(1)在主函式和其他類的外部定義的類被稱為全域性類,絕大多數的c++類是定義在該域,而全域性類具有全域性作用域。
(2)類作用域:當乙個類被定義在另乙個類之中,就是巢狀類。舉個例子,,如果類a定義在類b的內部,而且a的許可權是public,
那麼就可以把a和b的作用域看成一樣的,因為外部可以訪問a前提是帶有b::a這種形式。如果a的許可權是private,則只能在b的內部
建立a物件,無法在b的外部建立。
(3)類的定義在**塊中,則具有塊作用域,該作用域僅限於塊內使用,不能在塊外部使用建立物件。
ps:類名相同時存在覆蓋與遮蔽,可以使用::來使用外部類,例如全域性類,內部覆蓋之後,仍然可以使用::+類名來訪問,
也可以使用命名空間。
而由類產生的物件也有其作用域以及生存期,類名是沒有生存期的,因為它只是乙個型別,而物件是乙個實體,物件的生存期也是物件體內
的靜態成員的生存期,成員變數隨物件的建立而建立,也隨物件的撤銷而撤銷。
物件的生存期、作用域和可見作用域取決於物件的建立位置,存在全域性、區域性、類內之分,和普通變數差不多。
類在建立前必須定義,僅僅宣告是不夠的,但是如果僅僅宣告乙個指向類的指標,或者引用,是可以的。
友元函式:
友元函式可以分為友元之成員函式和非成員函式,一旦把乙個函式或者類定義成類a的友元,它們就可以訪問類a的任何成員了。
友元函式:在類的定義中用friend宣告乙個外部函式或者其他類的成員函式,該函式就可以訪問類內部的成員資料了。
注意事項:a類的成員函式作為b類的友元函式時,必須先定義a類,而不僅僅是宣告它。
友元函式的過載,友元函式要使用過載,必須把每個都宣告成友元函式,否則都只是普通函式。
友元類:類a作為類b的友元時,類a的所有成員函式都可以訪問b的成員。
friend <
類名》; //
友元類類名
運算子過載:
c++裡面提供一種運算子過載特性,為方便使用,可以在類內定義一些運算子過載,各種符號自定義不同功能,
可以用成員函式或者友元的方式來過載運算子,選擇的依據是左值是否自定義的,假如左值為自定義型別,則使用成員函式形式,
左值為非自定義型別,則使用友元形式來過載。
成員函式形式過載運算子:
返回型別
operator
運算子
(參數列);
使用這種方式進行過載,從外表看上去,就是運算子是函式名,符號不能用作函式名然而加上operator關鍵字使符號可以成為函式名。
而且成員函式的左運算元無需引數傳入,使用隱含的this指標。
友元形式過載運算子:friend
返回型別
operator
運算子
(參數列);
這種方式適合左運算元為非自定義型別,例如cin 、cout之類的系統提供的類。這種寫法傳入引數較多,因為不能通過this指標操作。
型別轉換:
我們知道,在c++存在一些型別轉換,隨著類概念的增加,我們可以自己編寫類與其他型別之間的型別轉換。
對於型別轉換,我們需要關注兩點。一、自定義型別->其他型別。二、其他型別->自定義型別
(1)由其他型別轉換成自定義型別是由建構函式來實現的,只有當類的定義和實現中提供合適的建構函式時,才能轉換成功。
例如乙個int 型轉換自定義型別,在建構函式的引數列表中,可以有三種情況:
(一)建構函式僅僅包括乙個int 型別引數(二)建構函式至少第乙個引數為int 型,其他引數都要有預設值。
(三)建構函式雖然不包含int型別的引數,但是包含有非int型引數,而且沒有其他引數或者其他引數有預設值,此時int 型別引數可隱式轉換成非int 型別。
(2)由自定義型別轉換成其他型別,這種形式要通過operator int()這種操作過載函式來實現轉換。
在類中定義型別轉換函式的形式 :operator 目標型別名();
有幾個使用要點:
(一)轉換函式必須是成員函式,不能是友元形式。
(二)轉換函式不能指定返回型別(不存在返回型別),但在函式體內必須用return 語句返回乙個目標型別的變數。
(三)轉換函式不能有引數
友元運算子過載
運算子就是一種特殊的函式 運算子過載可以是普通函式 const money operator const money a1,const money a2 可以是成員函式 const money operator const money a2 const 當二元運算子作為成員函式進行過載時,只有乙個引...
C 友元函式以及運算子過載
一 友元函式的作用 函式的私有和保護變數在類內可以訪問,在類外只可訪問公有變數 派生類在類內只可訪問其基類的公有變數和保護變數,在類外只可訪問其公有變數 要看具體的繼承型別 因此,在有些情況下,需要訪問類的私有或保護變數時,不得不呼叫其成員函式,因為只有成員函式才有訪問的許可權。因而多出許多時間開銷...
c 內聯函式 友元函式 友元類 運算子過載
短小 頻繁,且沒有迴圈體 的功能 1.內聯函式 特點 1.在函式名前加inline關鍵字 2.以空間換取時間,編譯階段整個函式體替換呼叫部分 2.巨集定義 1.對變數巨集定義 define 巨集名 值 2.帶參函式的巨集定義 define 函式名 形參表 不需要型別 函式體 1.整體思維 2.不進行...