第 13 章 常數、靜態成員與朋友關 係 13-1 常數物件與成員 13-1 常數物件與成員 13-2 物件成員與巢狀類別 13-2 物件成員與巢狀類別 13-3 靜態成員資料與函數 13-3 靜態成員資料與函數 13-4 朋友關係 13-4 朋友關係.

Slides:



Advertisements
Similar presentations
6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
Advertisements

布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
Introduction to Java Programming Lecture 13 Classes I OO Programming.
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
3Com Switch 4500 切VLAN教學.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
What is static?. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1; this.instanceX =
建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。
: OPENING DOORS ? 題組: Problem Set Archive with Online Judge 題號: 10606: OPENING DOORS 解題者:侯沛彣 解題日期: 2006 年 6 月 11 日 題意: - 某間學校有 N 個學生,每個學生都有自己的衣物櫃.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
JAVA 程式設計與資料結構 第二章 JAVA 程式基本概念及操作. 第一個程式 /* * 這是第一個程式 (FirstP.java) */ class FirstP{ public static void main(String args[]){ System.out.println("Whatever.
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
例外處理. 內 容 大 綱 例外的產生 捕捉例外 丟出例外 例外的產生 (1/4) 一般常見的執行時期錯誤包括整數除法分母為 0(divide by zero) ,陣列索引值越限 (array index out of range) ,輸入輸出錯誤 (I/O error) 、檔案 不存在或無法存取.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
第 18 章 名稱空間與例外處理 18-1 名稱空間 18-1 名稱空間 18-2 例外處理 18-2 例外處理.
第三章 變數與繫結 陳維魁 博士 儒林圖書公司. 2 大綱  變數的定義  變數元件  儲存區配置問題  參考的透明性  完全計算  捷徑計算  繫結 (binding)  繫結時間  精選習題.
程式註解說明. 2 程式註解格式 塊狀註解 對檔案、 class 、 method 、資料結構、一段程式 …. 等程式區塊 做說明。 第一行的開頭必需為 “/*” 且沒有其他文字,最後一行的開頭 必需以 “*/” 做為結束,在中間每一行的開頭都必需是一個 “*” 。 單行註解 佔據一整行的說明。 以.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍 7-4 VB.NET 常用的內建函數 7-4 VB.NET 常用的內建函數 7-5 遞迴函數 7-5.
Introduction to Java Programming Lecture 5: Using Java Classes : String & Math Spring 2009.
Chapter 13 塑模靜態觀點:物件圖 Static View : Object Diagram.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
:Problem D: Bit-wise Sequence ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10232: Problem D: Bit-wise Sequence 解題者:李濟宇 解題日期: 2006 年 4 月 16.
第九章 結構. 結構的宣告 結構 它是由許多不同 ( 或相同 ) 資料型態的變數所組成的 集合,通常利用結構標籤稱呼此集合 struct student { char *name; int score; }; struct 為保留字,表示結構的宣告開始 結構項目需定義於大括號「 { } 」內 結尾需加上分號.
3-3 使用幾何繪圖工具 Flash 的幾何繪圖工具包括線段工具 (Line Tool) 、橢圓形工具 (Oval Tool) 、多邊星形 工具 (Rectangle Tool) 3 種。這些工具畫出 來的幾何圖形包括了筆畫線條和填色區域, 將它們適當地組合加上有技巧地變形與配 色, 不但比鉛筆工具簡單,
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出與繼續迴圈 6-5 跳出與繼續迴圈 6-6 錯誤處理 6-6 錯誤處理.
Chapter 20 塑模動態觀點:狀態圖 Statechart Diagram. 學習目標  說明狀態圖的目的  定義狀態圖的基本記號  展示狀態圖的建構  定義活動、內部事件及遞延事件的狀態 圖記號.
: Tight words ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: : Tight Words 解題者:鐘緯駿、林一帆 解題日期: 2006 年 03 月 14 日 題意: 給定數字 k 與 n (0 ≦ k.
Hung-Hsiang WuWindows Processing Design1 Chapter 3 基本觀念 變數宣告與型態 特殊運算子符號 字串與數值的轉換 類別與物件的觀念 建立新的專案 WinMain 程式進入點 Include Header File.
類別函式庫. Java Bean 一個單獨的 AWT 元件都是一個 bean. Java Bean 也有一個 bean 的 class 可繼承, 但是並不強 迫一定要繼承. Bean 的結構 Properties 屬性 : 描述 bean 的屬性 如顏色, 大小,label 等. 透過一對 methods.
第12章 建立多表單與模組的應用程式 12-1 Visual Basic的方案與專案 12-2 模組化Visual Basic應用程式
: Problem A : MiniMice ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11411: Problem A : MiniMice 解題者:李重儀 解題日期: 2008 年 9 月 3 日 題意:簡單的說,題目中每一隻老鼠有一個編號.
資料庫程式設計與系統管理 SQL Server 2005 Express 第六章 進階資料庫設計.
Fugacity Coefficient and Fugacity
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
第 13 章 檔案與資料夾處理 13-1 檔案與資料夾操作 13-1 檔案與資料夾操作 13-2 循序檔案的文字檔案讀寫 13-2 循序檔案的文字檔案讀寫 13-3 隨機檔案的處理 13-3 隨機檔案的處理 13-4 二進位檔案的讀寫 13-4 二進位檔案的讀寫 13-5 檔案對話方塊 13-5 檔案對話方塊.
資料結構實習-一 參數傳遞.
6-2 認識元件庫與內建元件庫 Flash 的元件庫分兩種, 一種是每個動畫專 屬的元件庫 (Library) ;另一種則是內建元 件庫 (Common Libraries), 兩者皆可透過 『視窗』功能表來開啟, 以下即為您說明。
第 5 章 選擇控制項與條件敘述 5-1 結構化程式設計 5-1 結構化程式設計 5-2 關係與邏輯運算子 5-2 關係與邏輯運算子 5-3 簡單的條件敘述 5-3 簡單的條件敘述 5-4 選擇控制項 5-4 選擇控制項 5-5 巢狀條件敘述 5-5 巢狀條件敘述 5-6 多選一條件敘述 5-6 多選一條件敘述.
著作權所有 © 旗標出版股份有限公司 第 21 章 文件的權限及保護 功能設定. 本章提要 設定文件讀取權限 保護文件.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
: Beautiful Numbers ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11472: Beautiful Numbers 解題者:邱經達 解題日期: 2011 年 5 月 5 日 題意: 若一個 N 進位的數用到該.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
Structural Equation Modeling Chapter 6 CFA 根據每個因素有多重指標,以減少 測量誤差並可建立問卷的構念效度 驗證性因素分析.
第 17 章 樣板 17-1 樣板的基礎 17-1 樣板的基礎 17-2 樣板函數 17-2 樣板函數 17-3 樣板類別 17-3 樣板類別 17-4 非型態參數的樣板類別 17-4 非型態參數的樣板類別 17-5 樣板類別的繼承 17-5 樣板類別的繼承 17-6 特化樣板與靜態成員 17-6 特化樣板與靜態成員.
© The McGraw-Hill Companies, Inc., 2006© The McGraw-Hill Companies, Inc., 2007 Chapter 4 IP 定址:分級式定址.
Chapter 10 m-way 搜尋樹與B-Tree
第12章 多重表單與模組的應用程式 12-1 VB.NET的方案與專案 12-2 模組化VB.NET應用程式 12-3 多重表單的應用程式
演算法課程 (Algorithms) 國立聯合大學 資訊管理學系 陳士杰老師 Course 7 貪婪法則 Greedy Approach.
JAVA 程式設計與資料結構 第十六章 Hash Tables. Introduction Hash Tables 結構為一個 Array ,稱之為 Bucket array 。 如果想要新增一個物件,要根據這個物件的特性 將其加入 Hash Table 內。 Bucket Array 用 A 來代替,其.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出迴圈 6-5 跳出迴圈 6-6 VB.NET 的錯誤處理 6-6 VB.NET.
連續隨機變數 連續變數:時間、分數、重量、……
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
Visual C++重點複習.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
第 5 章 選擇控制項與條件敘述 5-1 結構化程式設計 5-1 結構化程式設計 5-2 關係與邏輯運算子 5-2 關係與邏輯運算子 5-3 簡單的條件敘述 5-3 簡單的條件敘述 5-4 選擇控制項 5-4 選擇控制項 5-5 巢狀條件敘述 5-5 巢狀條件敘述 5-6 多選一條件敘述 5-6 多選一條件敘述.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
Microsoft Excel.
第8章 字串與陣列 8-1一維陣列的處理 8-2 字串處理 8-3 多維陣列的處理 8-4 動態陣列與參數傳遞 8-5 陣列排序與搜尋.
Introduction to Java Programming Lecture 16 Super and Sub Classes.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
幼兒行為觀察與記錄 第八章 事件取樣法.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
: How many 0's? ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11038: How many 0’s? 解題者:楊鵬宇 解題日期: 2007 年 5 月 15 日 題意:寫下題目給的 m 與 n(m
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Presentation transcript:

第 13 章 常數、靜態成員與朋友關 係 13-1 常數物件與成員 13-1 常數物件與成員 13-2 物件成員與巢狀類別 13-2 物件成員與巢狀類別 13-3 靜態成員資料與函數 13-3 靜態成員資料與函數 13-4 朋友關係 13-4 朋友關係

13-1 常數物件與成員 - 說明 C++ 語言的 const 關鍵字可以用來修飾變 數、函數、函數參數、指標、物件和成員 函數等,例如: const 修飾的變數是宣告常 數,在函數的參數使用 const ,表示函數中 不允許更改參數值。 C++ 語言的 const 關鍵字可以用來修飾變 數、函數、函數參數、指標、物件和成員 函數等,例如: const 修飾的變數是宣告常 數,在函數的參數使用 const ,表示函數中 不允許更改參數值。 對於物件來說, const 關鍵字可以授予物件 權限,因為我們可以使用 const 關鍵字來限 制物件不能修改,或指定成員函數不能修 改物件內容。 對於物件來說, const 關鍵字可以授予物件 權限,因為我們可以使用 const 關鍵字來限 制物件不能修改,或指定成員函數不能修 改物件內容。

13-1 常數物件與成員 - 常數成員資料 與函數 ( 說明 ) 在 C++ 類別除了建構子和解構子外,成員資料和 函數都可以使用 const 關鍵字來修飾。例如:帳 戶類別 account 的宣告,如下所示: 在 C++ 類別除了建構子和解構子外,成員資料和 函數都可以使用 const 關鍵字來修飾。例如:帳 戶類別 account 的宣告,如下所示: class account { private: double amount; double amount; const double rate; const double rate;public: account(double a, double r); account(double a, double r); double getInterest() const; double getInterest() const; void printAccount() const; void printAccount() const;};

13-1 常數物件與成員 - 常數成員資料 與函數 ( 初始常數值 ) 對於類別中的常數,我們只能在建構子使 用成員初始語法( Member Initializer Syntax )來指定其值,如下所示: 對於類別中的常數,我們只能在建構子使 用成員初始語法( Member Initializer Syntax )來指定其值,如下所示: account::account(double a,double r) : rate(r),amount(a) { } 上述建構子「 : 」符號之後就是成員初始語 法,因為初始多個成員函數,所以使用「, 」 逗號分隔。 上述建構子「 : 」符號之後就是成員初始語 法,因為初始多個成員函數,所以使用「, 」 逗號分隔。

13-1 常數物件與成員 - 常數物件 在使用類別宣告物件變數時,也可以使用 const ,如下所示: 在使用類別宣告物件變數時,也可以使用 const ,如下所示: const date open(30, 1, 2006); 上述物件變數 open 是一個常數物件,表示 物件不允許修改,換句話說,常數物件一 定擁有常數的成員函數。 上述物件變數 open 是一個常數物件,表示 物件不允許修改,換句話說,常數物件一 定擁有常數的成員函數。

13-2 物件成員與巢狀類別 物件成員 物件成員 巢狀類別 巢狀類別

物件成員 -student 類別 在 C++ 類別宣告的成員資料除了可以使用資料型 態、結構和陣列變數外,也可以使用其他類別的 物件變數。例如: student 類別的宣告擁有 date 物件的成員資料,如下所示: 在 C++ 類別宣告的成員資料除了可以使用資料型 態、結構和陣列變數外,也可以使用其他類別的 物件變數。例如: student 類別的宣告擁有 date 物件的成員資料,如下所示: class student { private: int id; int id; double test1, test2, test3; double test1, test2, test3; date *birthday; date *birthday; double getAverage() const; double getAverage() const;public: student(int id, int d, int m, int y); student(int id, int d, int m, int y); void setTest(double t1, double t2, double t3); void setTest(double t1, double t2, double t3); void printStudent() const; void printStudent() const;};

物件成員 -date 類別 date 類別宣告,如下所示: date 類別宣告,如下所示: class date { private: int day, month, year; int day, month, year;public: date(int d, int m, int y); date(int d, int m, int y); void printDate() const; void printDate() const;};

巢狀類別 - 說明 巢狀類別( Nested Class )強調類別之間 的組成關係,例如:學生擁有成績資料, 所以 test 類別屬於 student 類別的一部分。 巢狀類別( Nested Class )強調類別之間 的組成關係,例如:學生擁有成績資料, 所以 test 類別屬於 student 類別的一部分。 student 類別擁有成員類別 test 的「內層類 別」( Inner Classes ),而 student 是巢 狀類別的「外層類別」( Enclosing Class ),內層類別可以位在 private 、 protected (第 15 章說明)和 public 區塊。 student 類別擁有成員類別 test 的「內層類 別」( Inner Classes ),而 student 是巢 狀類別的「外層類別」( Enclosing Class ),內層類別可以位在 private 、 protected (第 15 章說明)和 public 區塊。

巢狀類別 - 範例 class student { // student 外層類別宣告 private: int id; int id; class test { // test 內層類別宣告 class test { // test 內層類別宣告 private: private: double score; double score; public: public: double getScore() const { return score; } double getScore() const { return score; } void setScore(double s) { score = s; } void setScore(double s) { score = s; } }; }; test quiz; test quiz;public: student(int no) : id(no) {} student(int no) : id(no) {} void setScore(double t); void setScore(double t); void printStudent() const; void printStudent() const;};

巢狀類別 - 存取說明 內層類別如果位在 private 區塊,其存取範圍只限 外層類別之內;如果位在 public 區塊,其存取範 圍是全域。 內層類別如果位在 private 區塊,其存取範圍只限 外層類別之內;如果位在 public 區塊,其存取範 圍是全域。 內層類別如果位在 private 區塊,外層類別的成員 並不能存取或呼叫內層類別宣告成 private 的成員, 只能存取宣告成 public 的成員。例如: printStudent() 成員函數不能直接存取成員資料 score ,需要呼叫 test 類別的 getScore() 成員函 數,才能取得成績資料。 內層類別如果位在 private 區塊,外層類別的成員 並不能存取或呼叫內層類別宣告成 private 的成員, 只能存取宣告成 public 的成員。例如: printStudent() 成員函數不能直接存取成員資料 score ,需要呼叫 test 類別的 getScore() 成員函 數,才能取得成績資料。 內層類別如果位在 public 區塊,外層類別的成員 同樣不能存取或呼叫內層類別宣告成 private 的成 員,不過 public 成員的存取範圍則是全域。 內層類別如果位在 public 區塊,外層類別的成員 同樣不能存取或呼叫內層類別宣告成 private 的成 員,不過 public 成員的存取範圍則是全域。

13-3 靜態成員資料與函數 - 說明 在 C++ 的類別宣告中,宣告成 static 的變 數和函數是屬於類別。 在 C++ 的類別宣告中,宣告成 static 的變 數和函數是屬於類別。 當建立物件時,並不會替每一個物件建立 獨立的靜態成員資料與函數,所有此類別 建立的物件,都是使用同一份靜態成員變 數和呼叫同一個靜態函數。 當建立物件時,並不會替每一個物件建立 獨立的靜態成員資料與函數,所有此類別 建立的物件,都是使用同一份靜態成員變 數和呼叫同一個靜態函數。

13-3 靜態成員資料與函數 - 宣告類別 的靜態成員資料與函數 靜態成員資料與函數是使用 static 關鍵字進行宣 告。例如: student 類別新增靜態變數 teacherNo 、 count 和靜態成員函數 getStudentCount() ,如下所示: 靜態成員資料與函數是使用 static 關鍵字進行宣 告。例如: student 類別新增靜態變數 teacherNo 、 count 和靜態成員函數 getStudentCount() ,如下所示: class student { private: ……… ……… static int count; static int count;public: ………… ………… static int teacherNo; static int teacherNo; static int getStudentCount() { return count; }; static int getStudentCount() { return count; };};

13-3 靜態成員資料與函數 - 初始靜態 資料 在 ANSI-C++ 類別宣告中的靜態資料都只 有宣告,並沒有真正定義變數和指定初值, 我們需要額外初始類別的靜態變數,其位 置是在類別宣告外的全域變數,如下所示: 在 ANSI-C++ 類別宣告中的靜態資料都只 有宣告,並沒有真正定義變數和指定初值, 我們需要額外初始類別的靜態變數,其位 置是在類別宣告外的全域變數,如下所示: int student::count = 0; int student::teacherNo = 200; 上述程式碼使用範圍運算子「 :: 」來定義靜 態變數和指定初值。 上述程式碼使用範圍運算子「 :: 」來定義靜 態變數和指定初值。

13-3 靜態成員資料與函數 - 存取靜態 資料與呼叫靜態函數 在程式碼存取類別的靜態變數和呼叫靜態 函數時,也需要使用範圍運算子,如下所 示: 在程式碼存取類別的靜態變數和呼叫靜態 函數時,也需要使用範圍運算子,如下所 示: cout << "\n 學生數 (student): " << student::getStudentCount(); student::getStudentCount(); student::teacherNo = 201;

13-4 朋友關係 朋友函數 朋友函數 朋友類別 朋友類別

13-4 朋友關係 - 說明 C++ 語言的朋友關係可以分為朋友函數 ( Friend Functions )和朋友類別 ( Friend Class )兩種。程式是使用 friend 關鍵字來宣告和建立函數和類別間的 朋友關係。 C++ 語言的朋友關係可以分為朋友函數 ( Friend Functions )和朋友類別 ( Friend Class )兩種。程式是使用 friend 關鍵字來宣告和建立函數和類別間的 朋友關係。 朋友關係是 C++ 語言一種功能十分強大的 功能,因為朋友函數或類別擁有權限,可 以存取其他類別隱藏的成員資料,不過, 在使用上需要十分注意。 朋友關係是 C++ 語言一種功能十分強大的 功能,因為朋友函數或類別擁有權限,可 以存取其他類別隱藏的成員資料,不過, 在使用上需要十分注意。

13-4 朋友關係 - 特點 朋友關係是由類別所授予:類別 A 授予函數 b() 或 類別 B 擁有朋友關係,而不是 b() 或 B 向 A 取得朋友 關係。 朋友關係是由類別所授予:類別 A 授予函數 b() 或 類別 B 擁有朋友關係,而不是 b() 或 B 向 A 取得朋友 關係。 朋友關係是單方向:如果 A 認定 B 是朋友,並不表 示 B 是 A 的朋友。 朋友關係是單方向:如果 A 認定 B 是朋友,並不表 示 B 是 A 的朋友。 朋友關係無法繼承:如果 A 是 B 的朋友,並不表示 繼承自 A 的類別 C 是 B 的朋友,關於繼承的說明請 參閱第 15 章。 朋友關係無法繼承:如果 A 是 B 的朋友,並不表示 繼承自 A 的類別 C 是 B 的朋友,關於繼承的說明請 參閱第 15 章。 朋友關係沒有遞移性( Transitive ):如果 A 是 B 的朋友, B 是 C 的朋友,並不表示 A 是 C 的朋友。 朋友關係沒有遞移性( Transitive ):如果 A 是 B 的朋友, B 是 C 的朋友,並不表示 A 是 C 的朋友。

朋友函數 - 說明 對於不屬於 C++ 類別的成員函數或一般函 數來說,函數並不能存取類別宣告成 private 或 protected (在第 15 章說明)區 塊的成員,如果函數需要存取 private 或 protected 成員,在 C++ 語言可以使用 friend 關鍵字授予其他函數的朋友關係,即 朋友函數。 對於不屬於 C++ 類別的成員函數或一般函 數來說,函數並不能存取類別宣告成 private 或 protected (在第 15 章說明)區 塊的成員,如果函數需要存取 private 或 protected 成員,在 C++ 語言可以使用 friend 關鍵字授予其他函數的朋友關係,即 朋友函數。 不過,朋友函數並不是類別的成員函數, 但是授予朋友關係後,朋友函數可以存取 類別位在 private 和 protected 區塊宣告的 成員。 不過,朋友函數並不是類別的成員函數, 但是授予朋友關係後,朋友函數可以存取 類別位在 private 和 protected 區塊宣告的 成員。

朋友函數 - 一般函數的朋友函 數 第 5 章的函數也可以成為類別的朋友函數。例如: 類別 circle 授予 getRadius() 函數成為它的朋友函 數,如下所示: 第 5 章的函數也可以成為類別的朋友函數。例如: 類別 circle 授予 getRadius() 函數成為它的朋友函 數,如下所示: class circle { private: int radius; int radius;public: circle(int r) : radius(r) {} circle(int r) : radius(r) {} void print(point &p); void print(point &p); friend int getRadius(circle &c); friend int getRadius(circle &c);};

朋友函數 - 成員函數的朋友函 數 類別的成員函數也可以宣告成朋友函數。例如: 在 point 類別授予 circle 類別的 print() 成員函數為 朋友關係,如下所示: 類別的成員函數也可以宣告成朋友函數。例如: 在 point 類別授予 circle 類別的 print() 成員函數為 朋友關係,如下所示: class point { private: int x, y; int x, y;public: …… …… friend void circle::print(point &p); friend void circle::print(point &p);};