C++ 多型
多型(Polymorphism)是物件導向程式設計(OOP)的核心概念之一,它允許物件在相同操作下表現出不同的行為。在 C++ 中,多型通常透過繼承和虛擬函式來實現。
理解多型
想象一個場景,你有一個動物園,裡面有各種動物,如貓、狗、鳥等。每個動物都有自己的叫聲。使用物件導向程式設計,我們可以建立一個基類 Animal
來表示所有動物,併為其定義一個 makeSound()
虛擬函式。然後,我們可以建立派生類,如 Cat
、Dog
和 Bird
,並重寫它們的 makeSound()
方法以實現各自的叫聲。
class Animal {
public:
virtual void makeSound() = 0; // 虛擬函式宣告
};
class Cat : public Animal {
public:
void makeSound() override {
cout << "Meow!" << endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
cout << "Woof!" << endl;
}
};
class Bird : public Animal {
public:
void makeSound() override {
cout << "Chirp!" << endl;
}
};
在這個例子中,Animal
類的 makeSound()
函式被宣告為虛擬函式,這意味著它可以在派生類中被重寫。當我們建立一個 Animal
型別的指標或引用時,我們可以指向任何派生類的物件。然後,呼叫 makeSound()
函式時,實際執行的程式碼將取決於指向的物件的型別。
多型的優點
- 程式碼的可重用性: 多型允許您為通用的基類操作建立通用函式,並在派生類中進行具體實現。
- 靈活性: 多型使您的程式碼更加靈活,因為它允許您在執行時根據實際情況選擇不同的行為。
- 可維護性: 多型可以提高程式碼的可維護性,因為它使程式碼更易於理解和修改。
多型的實現
在 C++ 中,多型的實現主要依靠以下兩個機制:
- 繼承: 如上所述,多型通常透過繼承來實現。基類定義虛擬函式,派生類可以重寫這些函式以實現特定的行為。
- 虛擬函式: 虛擬函式是帶有
virtual
關鍵字的成員函式。當呼叫虛擬函式時,實際執行的程式碼將取決於指向的物件的型別。
總結
多型是物件導向程式設計中一個強大的工具,它允許您建立更靈活、更可維護的程式碼。透過理解多型的基本概念及其實現機制,您可以提高自己的程式設計技能並構建更加優雅的軟體解決方案。
C++ 檔案操作
C++ 提供了多種機制來操作檔案,包括建立、讀取、寫入和修改檔案。常用的檔案操作庫包括 fstream
和 <filesystem>
。
1. 使用 fstream
庫
fstream
庫是 C++ 中最常用的檔案操作庫之一。它提供了以下類:
ofstream
: 用於建立和寫入檔案ifstream
: 用於讀取檔案fstream
: 同時支援讀寫操作
示例:建立並寫入檔案
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// 建立 ofstream 物件並開啟檔案
ofstream myFile("myfile.txt");
// 檢查檔案是否開啟成功
if (myFile.is_open()) {
// 將文字寫入檔案
myFile << "This is a line of text in my file." << endl;
// 關閉檔案
myFile.close();
cout << "File written successfully." << endl;
} else {
cout << "Error opening file." << endl;
}
return 0;
}
示例:讀取檔案
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// 建立 ifstream 物件並開啟檔案
ifstream myFile("myfile.txt");
// 檢查檔案是否開啟成功
if (myFile.is_open()) {
string line;
// 逐行讀取檔案內容
while (getline(myFile, line)) {
cout << line << endl;
}
// 關閉檔案
myFile.close();
} else {
cout << "Error opening file." << endl;
}
return 0;
}
2. 使用 <filesystem>
庫
C++17 引入了 <filesystem>
庫,提供了更現代的檔案操作介面。
示例:建立並寫入檔案
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main() {
// 建立檔案路徑
fs::path myFile("myfile.txt");
// 開啟檔案並寫入文字
fs::ofstream ofs(myFile);
if (ofs.is_open()) {
ofs << "This is a line of text in my file." << endl;
ofs.close();
} else {
cout << "Error opening file." << endl;
}
return 0;
}
示例:讀取檔案
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main() {
// 建立檔案路徑
fs::path myFile("myfile.txt");
// 開啟檔案並讀取內容
fs::ifstream ifs(myFile);
if (ifs.is_open()) {
string line;
while (getline(ifs, line)) {
cout << line << endl;
}
ifs.close();
} else {
cout << "Error opening file." << endl;
}
return 0;
}
總結
C++ 提供了多種檔案操作機制,可用於建立、讀取、寫入和修改檔案。fstream
庫是傳統選擇,而 <filesystem>
庫提供了更現代的介面。選擇哪個庫取決於您的專案需求和個人喜好。
請注意,以上只是一些簡單的示例。C++ 檔案操作還涉及許多其他高階功能,例如目錄操作、錯誤處理和檔案迭代。建議您查閱 C++ 標準庫文件和相關教程以瞭解更多資訊。
最後
為了方便其他裝置和平臺的小夥伴觀看往期文章:
微信公眾號搜尋:Let us Coding
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注