c++

c++數據結構

c++數據結構

打開文件:-

  • 在讀取或寫入文件之前,應該先打開文件。ofstream或fstream對象甚至都可以用於打開文件進行寫入,而ifstream對象僅用於打開文件進行讀取。
  • 這是open()函數的標準語法:

Void open (const char *filename, ios::openmode模式);

  • 第一個參數決定了要打開的文件的名稱和位置,然後open()成員函數的第二個參數描述了應該在其中打開文件的模式。
  • 您可以通過ORing將兩個或多個值連接在一起。例如,假設您需要以寫模式打開一個文件,並希望截斷它,以防它已經存在。下麵是語法:
  • ofstream輸出文件;

輸出文件。Open (" file.dat ", ios::out | ios::trunc);

  • fstream afile;

afile。Open (" file.dat ", ios::out | ios::in);

關閉文件:-

  • 當c++程序關閉時,它會關閉並刷新所有流,然後釋放所有分配的內存,並關閉每個可訪問的文件。但是程序員在終止程序之前關閉所有打開的文件,這一直是一個令人難以置信的實踐。
  • 這是close()函數的標準語法

Void close ();


c++異常處理

  • 將係統錯誤消息更改為用戶友好的錯誤消息的過程稱為異常處理。這是c++處理運行時錯誤和維護正常的c++應用程序流程的一個驚人特性。
  • 異常是在程序執行過程中發生的破壞程序指令傳統流程的事件。
  • 異常是程序在執行過程中遇到的運行時偏差。這是一種情況,程序有一個不尋常的條件,因此包含它的代碼段不能處理問題/事項。異常包括被0除法或在其邊界外訪問數組或耗盡內存等情況。

為了處理這些異常,使用了異常處理機製來識別和影響這種情況。

異常處理係統由以下部分:

  • 發現問題(找到異常)
  • 通知其發生(拋出異常)
  • 接收錯誤信息(捕捉異常)
  • 采取適當的行動(處理異常)

  • 將係統錯誤消息更改為用戶友好的錯誤消息的過程稱為異常處理。這是c++處理運行時錯誤和維護正常的c++應用程序流程的一個驚人特性。
  • 異常是在程序執行過程中發生的破壞程序指令傳統流程的事件。
  • 異常是程序在執行過程中遇到的運行時偏差。這是一種情況,程序有一個不尋常的條件,因此包含它的代碼段不能處理問題/事項。異常包括被0除法或在其邊界外訪問數組或耗盡內存等情況。

為了處理這些異常,使用了異常處理機製來識別和影響這種情況。

異常處理係統由以下部分:

  • 發現問題(找到異常)
  • 通知其發生(拋出異常)
  • 接收錯誤信息(捕捉異常)
  • 采取適當的行動(處理異常)

為什麼要處理異常?

  1. 錯誤處理代碼與普通代碼的分段:在傳統的錯誤處理代碼中,始終存在if else條件來處理錯誤。這些條件和處理錯誤的代碼與正常流程有關。這使得代碼更難理解和維護。帶有try catch塊的錯誤處理代碼與正常流分離。
  2. 函數或方法可以處理它們選擇的任何異常:函數可以拋出各種異常,但可以決定處理其中的一些異常。其他被拋出但未被捕獲的異常可以由調用者管理。但是如果調用方選擇不捕獲異常,則異常由調用方的調用方處理。在c++中,函數可以使用throw關鍵字定義拋出的異常。此函數的調用者應該以多種方式處理異常(要麼重新指定異常,要麼獲取異常)。
  3. 錯誤類型的分組:在c++中,基本類型和對象都經常作為異常拋出。我們可以對異常對象進行排序,並在名稱空間或類中對異常進行分組,然後根據它們的類型對它們進行分類。

我們使用C和c++中的數據結構來存儲異構數據,即不同類型的數據。考慮與圖書館中保存的一本書相關的所有數據。圖書管理員將下列屬性關聯到一本書

的名字

作者

出版商

一年

ISBN號

主題

類型

我們可以在如下所示的數據結構中定義所有這些,也可以使用typedef為它創建一個別名:

enum類型{平裝、硬拷貝、電子書};struct bookRecord{字符串名稱;字符串的作者;字符串出版商int年;字符串ISBN_Number;字符串對象;類型t;};struct bookRecord BOOK;在c++中定義結構的正式語法是struct[結構標簽]{成員定義; member definition; ... member definition; } [one or more structure variables];

可以通過成員訪問操作符(.)訪問結構的任何成員。成員訪問操作符被編碼為結構變量名和我們希望訪問的結構成員之間的句點。可以像傳遞任何其他變量或指針一樣,將結構體作為函數參數傳遞。

定義指向結構體的指針,方法與定義指向其他變量的指針非常相似,如下所示。如。

書書c書*bk;你可以將一個結構體的地址賦給它的同類指針,如下所示:要訪問BookSc中的任何字段,現在可以對指針bk->name使用->操作符;//獲取BookSc的名稱

在c++中,可以使用關鍵字typedef為任何數據類型創建別名。我們已經在上麵使用它來創建Book Record的別名。

讓我們把所有這些概念結合到一個程序中,以便實際理解。將以下代碼保存在一個文件中,例如demoStruct.cpp。

#include 使用命名空間std;enum圖書類型{平裝,硬拷貝,電子書}類型;struct bookRecord{字符串標題;字符串的作者;字符串的出版商;int;字符串ISBN_Number;字符串對象;BookType類型;}; typedef struct bookRecord BOOK; void displayBook(const BOOK *bookptr ); int main() { BOOK Book1; // Declare Book1 of type Book BOOK Book2; // Declare Book2 of type Book // Create Book 1 record Book1.title = "5G Overview"; Book1.author = "William Stalling"; Book1.subject = "Wireless"; Book1.publisher = "Pearson"; Book1.ISBN_Number = "1234567"; Book1.year = 2021; Book1.type = hardcopy; // Create Book 2 record Book2.title = "Let us C"; Book2.author = "Yashwant Kanitkar"; Book2.subject = "Programming"; Book2.publisher = "BPB"; Book2.ISBN_Number = "3434343"; Book2.year = 2020; Book2.type = paperback; // Print Book1 info, passing address of structure displayBook( &Book1 ); // Print Book2 info, passing address of structure displayBook( &Book2 ); return 0; }//end main() // This function accept pointer to structure as parameter. void displayBook(const BOOK *book ) { cout << "Book title : " << book->title <author <subject <publisher <ISBN_Number <type) { case paperback: cout << "Book Type : paperback"<

現在編譯並運行代碼。您可以看到它顯示了我們在main()中創建的兩個簿記記錄。

(base) 9:09:39:~ % g++ structDemo.cpp

(基數)9:09:41:~ % ./ a.t out

書名:《5G概述》

本書作者:威廉·斯托林

書籍主題:無線

圖書出版商:培生集團

圖書ISBN編號:1234567

書籍類型:硬拷貝

題目:Let us C

本書作者:Yashwant Kanitkar

書籍主題:編程

圖書出版商:BPB

圖書ISBN編號:3434343

書籍類型:平裝書

c++類和對象:-

類是一種用戶定義的數據類型,它擁有自己的數據成員和成員函數。換句話說,類是數據成員和成員函數的集合,可以通過創建該類的對象來訪問和使用。

類表示一組相似的對象。它也是一種將描述實體的數據及其關聯函數綁定在一起的方法。

語法:- class classname {};

需要類來表示真實世界的實體。要描述一個真實世界的實體,我們需要兩個不同的東西。一個是特性,另一個是功能。

類定義:-類類名{private: ... ... protected: ... ... public: ... ...};默認情況下,類成員是私有的。
類方法的定義:—成員函數通常定義在兩個地方:在類定義之外語法:Class -name::function-name在類定義內部示例:—類區域{public: int getarea() {return side*side;}};

對象:

對象是類的實例。無論何時定義類,都不分配內存,但當對象初始化時,將為該類分配內存。

一旦創建了一個類,我們就可以使用以下命名為object的語法創建該類型的變量(類類型)。

語法:- class_name variable_name;

通過在一條語句中聲明一個對象,我們可以創建屬於該類的任意數量的對象。此語句是在main()函數中編寫的。

對象也可以通過將其名稱直接放在類的右大括號之後來定義。


c++繼承:-

它是一個將現有類的屬性和行為繼承到新類中的過程。

繼承的主要優點是代碼可重用性。

在繼承的概念中,現有的類稱為基類,繼承的新類稱為派生類。

繼承的思想實現了IS - A關係。例如,哺乳動物是一種動物,貓是一種哺乳動物,因此貓也是一種動物,等等。

我們可以通過重用類來節省時間和金錢。而且開發速度快,易於擴展。它能夠顯示繼承關係及其傳遞性質,從而與實際世界問題緊密相連。

需要繼承:-

  1. 它被用來代表現實世界的關係。
  2. 它提供了可重用性。
  3. 它支持可傳遞性。

遺產有五種類型:-

  1. 單繼承
  2. 多級繼承
  3. 多重繼承
  4. 分層的繼承
  5. 混合繼承

單繼承在單繼承中,一個子類從一個基類繼承。

語法:- class A{…};B類:公共A{…};

多級繼承-它本質上是傳遞的。在這種類型的繼承中,我們將從已經派生的類中派生一個類。

語法:

類A{…};B類:公共A{…};C類:公共B{…};

多重繼承在多重繼承中,一個子類繼承自多個基類。

語法:

A1類{…};類A2{…};B類:公共A1,公共A2{…};

分層的繼承在分層繼承中,許多子類繼承自一個基類。

語法:- class A{…};B1類:公共A{…};類B2:公共A{…};

混合繼承:-

語法:- class A{…};B類:公共A{…};類C{…};類D:公共B,公共C{…};

c++重載:-

在c++中,當相同的操作符或函數名使用不同的簽名時,就會發生重載。

操作符和函數都可以重載。各種定義必須通過它們的簽名來區分(否則調用的簽名是不明確的)。

  • 注意signature是操作符或函數名及其參數類型的有序列表。
  • 例如sum(int, long)和sum(long, int)有不同的簽名。
  • 例如,add(const Base &)和add(const Derived &)具有不同的簽名,即使Derived是-a Base。
  • 使用最特定的匹配來選擇調用哪一個。

超載提示:-

  1. 當您希望以多態方式替換不同的子類型時,請使用虛擬重寫。
  2. 當您希望為類似的抽象提供相關接口時,請使用重載。
  3. 當抽象不同時使用不同的名稱。

操作符重載:-

在同一個運算符上賦值多個運算,稱為運算符重載。

為了實現運算符重載,我們必須編寫一個稱為operator()的特殊函數。

語法:- return_type操作符op (arg list) {Body;}

可以用兩種方式編寫operator() -

  1. 類函數
  2. 友元函數

下麵是不能重載的操作符列表-

  1. ::
  2. 嗎?
  3. sizeof ()

主要有兩種操作符重載:

  1. 一元操作符重載—隻包含一個操作數的操作符稱為一元操作符重載。
  2. 二進製運算符重載—包含兩個操作數的操作符稱為二進製操作符重載。

函數重載:-

函數重載是c++的一個特性,我們有多個具有相同名稱和不同類型參數的函數,那麼它被稱為函數重載。

c++多態性:-

多態性源於兩個希臘單詞,即poly和morphs, poly的意思是“許多”,morphs的意思是“形式”。

用多種形式表示一種形式的技術稱為多態性。其中一種形式表示基類中始終存在的原始形式或原始方法,多種形式表示派生類中始終存在的重寫方法。

我們可以舉個例子來理解這一點

每個人都有不同的行為,比如假設你當時在教室裏,你表現得像個學生,但當你當時在市場上,你表現得像個顧客。

基本上有兩種類型的多態性:

  1. 靜態多態性:—靜態多態性也稱為早期綁定和編譯時多態性。在靜態多態性中,內存將在編譯時分配。

    重載成員函數通過匹配參數type和number來選擇調用。編譯器在編譯時就能理解這些信息,並能夠在編譯時為特定的調用選擇適當的函數。
  2. 動態多態性:—動態多態性也稱為後期綁定和運行時多態性。在動態多態性中,內存將在運行時分配。
  3. 虛函數:—當我們在基類和派生類中使用相同的函數名時,基類中的函數在其正常聲明前使用關鍵字Virtual聲明為虛函數。

    當一個函數被構造為虛函數時,c++根據基指針所指向的對象類型而不是指針的類型來決定在運行時使用哪個函數。

    c++抽象:-
    抽象在c++中並不是一個新概念,它是一個用來隱藏背景細節,隻顯示基本特征的概念。數據抽象可以是表示基本特性而不包括實現細節的過程。

    抽象的主要優點是它降低了代碼的複雜性。

    抽象類:-

    抽象類是一個至少包含一個純虛函數的類。

    抽象類的一些特征是:

  4. 抽象類不能實例化,但是經常創建抽象類類型的指針和引用。
  5. 抽象類可以有普通的函數和變量以及純虛函數。
  6. 抽象類通常用於向上強製轉換,以便其派生類可以使用其接口。
  7. 繼承抽象類的類應該執行所有純虛函數,否則它們也會變得抽象。

c++文件和流:-

  • 我們一直在使用iostream標準庫,它為我們提供了cin和cout方法,分別用於從標準輸入讀取和寫入普通輸出。
  • 要從文件中讀寫,我們需要另一個標準c++庫fstream,它描述了三種新的數據類型:
  • Ofstream
  • Ifstream
  • Fstream

FSTREAM: -

  1. Ofstream:-這種類型的數據表示輸出文件流,用於創建文件和將信息寫入文件。
  2. Ifstream:—這種類型的數據基本上代表輸入文件流,用於從文件中讀取信息。
  3. Fstream:它通常處理文件流,具有ofstream和ifstream的能力,這意味著它可以創建文件,然後將信息寫入文件,並從文件中讀取信息。

請注意: -要在c++主頭文件中執行文件處理,必須包含在您的c++源文件中。

Baidu
map