第七章 檔案處理
7.1 檔案I/O函式群 檔案I/O與作業系統: 檔案I/O與字元I/O都屬C的標準函式庫 OS均有提供但使用不易(DOS-ASM) 檔案I/O各自不同 ANSI提供標準函式庫 I/O與OS由編譯器提供介面
7.1 檔案I/O函式群 檔案I/O與作業系統:
7.1 檔案I/O函式群 UNIX作業系統: UNIX由C撰寫 可以直接以System Call呼叫I/O
7.1 檔案I/O函式群 UNIX作業系統:
7.1 檔案I/O函式群 DOS作業系統: DOS由ASM撰寫 需透過函式呼叫DOS
7.1 檔案I/O函式群 DOS作業系統:
7.1 檔案I/O函式群 UNIX移植到DOS: 由編譯器提供“模擬UNIX系統的呼叫函式”
7.1 檔案I/O函式群 UNIX移植到DOS:
7.1 檔案的觀念 C的檔案觀念:
7.1 檔案的觀念 C的檔案觀念: #include<stdio.h> void main( ) { FILE *fp1; char c; fp1=fopen(“text.txt”,”w”); while ((c=getchar( ))!=‘\n’) put(c,fp1); fclose(fp1); }
7.1 檔案的觀念 C的檔案觀念:
7.1 檔案的觀念 C的檔案觀念: #include<stdio.h> void main( ) { FILE *fp1; char c; fp1=fopen(“text.txt”,”r”); while ((c=getchar( ))!=EOF) printf(c,fp1); fclose(fp1); } stream (pointer)
7.1 檔案的觀念 C的檔案觀念: 由fp1讀出一個字元: c=fgetc(fp1); 將c寫入fp1中: fputc(c,fp1);
第八章 繼承
8.1 什麼是繼承 繼承的特質: 遺傳,包括特性,習慣…等 減少程式的重復撰寫
8.1 什麼是繼承 家族族譜: 姓相同 有些器官長的相 住址相同 電話一樣
8.1 什麼是繼承 生物: 相同的分類有共同的特色
8.1 什麼是繼承 幾何圖形:
8.1 什麼是繼承 幾何圖形: 四邊行的求面積公式可以被延用至後代 四邊形 : L1L2L3L4 矩形 : 長寬 矩形 : 長寬 正方形 : 長寬 (長=寬)
8.2 用C++描述繼承 族譜: class GrandFather { 姓,名,血型,住址,電話, … } class Father : public GrandFather { … } class Son : public Father { … }
8.2 用C++描述繼承 生物: class Animal { … } class Mammal : public Animal { … } class Human : public Mammal { … }
8.2 用C++描述繼承 幾何圖形: class Shape { … } class Rectangle : public Shape { … } class Square : public Rectangle { … }
8.2 用C++描述繼承 繼承的方式: class Animal { public : int Life; int canMove(); }; class Mammal : public Animal int Milk;
8.2 用C++描述繼承 繼承的方式: #include <iostream.h> // 矩形 // 矩形 class Rectangle { public : int nLength; int nWidth; int Area() { return nLength * nWidth; } }; // 正方形 class Square : public Rectangle { return nLength * nLength; }
8.2 用C++描述繼承 繼承的方式: // 主程式 void main() { Square a; a.nLength = 5; // 主程式 void main() { Square a; a.nLength = 5; cout << a.Area() << endl; }
8.2 用C++描述繼承 繼承的權限: #include <iostream.h> // 矩形 // 矩形 class Rectangle { private : int nLength; int nWidth; public : Rectangle (int len=0, int wid=0) { nLength=len; nWidth=wid; } int Area () { return nLength * nWidth; } }; // 正方形 class Square : public Rectangle { public : Sequare (int len=0) { nLength=len; // 錯誤 } Area() { return nLength * nLength; }
8.2 用C++描述繼承 繼承的權限: protected 對繼承下來的class為public 其他的為private #include <iostream.h> // 矩形 class Rectangle { protected : int nLength; int nWidth; public : Rectangle (int len=0, int wid=0) { nLength=len; nWidth=wid; } int Area () { return nLength * nWidth; } }; // 正方形 class Square : public Rectangle { public : Sequare (int len=0) { nLength=len; // 正確 } Area() { return nLength * nLength; } 對繼承下來的class為public 其他的為private
8.2 用C++描述繼承 繼承的等級: #include <iostream.h> // 矩形 // 矩形 class Rectangle { protected : int nLength; int nWidth; public : Rectangle (int len=0, int wid=0) { nLength=len; nWidth=wid; } int Area () { return nLength * nWidth; } }; // 正方形 class Square : public Rectangle { public : Sequare (int len=0) { nLength=len; // 正確 } Area() { return nLength * nLength; }
8.2 用C++描述繼承 繼承的等級: public class A { private : int nPrivate; protected : int nProtected; public : int nPublic; } class B : public A class C : public C
8.2 用C++描述繼承 繼承的等級: protected class A { private : int nPrivate; int nProtected; public : int nPublic; } class B : protected A class C : protected C
8.2 用C++描述繼承 繼承的等級: class A { private : int nPrivate; protected : int nProtected; public : int nPublic; } class B : private A class C : private C
8.2 多重繼承 族譜:
8.2 多重繼承 幾何圖形:
8.2 多重繼承 範例:baby.cpp 結果: Father的建構元一 Mother的建構元 Child的建構元一 爸爸的老婆 http://140.113.212.206/自強社講義網頁/C++/Program%20Files/ch8/baby.cpp 結果: Father的建構元一 Mother的建構元 Child的建構元一 爸爸的老婆 媽媽的老公 住址 piggy@abc.def
8.2 多重繼承 範例:baby.cpp Child Baby(“寶寶的小女友”,“寶寶的姓”,“寶寶的地址”,10); 假如在main( )中,baby的宣告為: Child Baby(“寶寶的小女友”,“寶寶的姓”,“寶寶的地址”,10); 衍生物件不會上傳參數 故呼叫沒有參數的建構元 結果: Father的建構元一 Mother的建構元 Child的建構元二 爸爸的老婆 媽媽的老公 住址 cochon@abc.def
8.2 多重繼承 修正: 結果: Father的建構元二 Mother的建構元 Child的建構元二 爸爸的老婆 媽媽的老公 住址 Child( char *wife, char *surname, char *address, long money ): Father( wife, surname, address, money ) { cout << "Child 的建構元二" << endl; strcpy( Email, "cochon@abc.def" ); } 結果: Father的建構元二 Mother的建構元 Child的建構元二 爸爸的老婆 媽媽的老公 住址 cochon@abc.def
8.2 多重繼承 範例:baby.cpp Cout<<Mother::GetMoney( )<<endl; cout<<Father::Father::Surname<<endl; GetMoney GetMoney surname surname
8.2 多重繼承 範例:baby.cpp Long Child :: GetMoney ( ) { return Father::GetMoney+Mother::GetMoney( ); } GetMoney GetMoney surname surname