c++基礎學習(10)--(文件、流、異常處理、動態內存、命名空間)

文章目錄

  • 目錄
    • 1.文件和流
    • 2.異常處理
    • 3.動態內存
    • 4.命名空間

目錄

1.文件和流

在這里插入圖片描述
在這里插入圖片描述
注意

文件打開方式中的in和out都是相對于內存(計算機)而言的,計算機讀取文件,是將數據從磁盤中的文件讀入到內存中,所以用的是in
在這里插入圖片描述
在這里插入圖片描述

#include <fstream>
#include <iostream>
using namespace std;int main ()
{char data[100];// 以寫模式打開文件ofstream outfile;outfile.open("afile.dat");cout << "Writing to the file" << endl;cout << "Enter your name: "; cin.getline(data, 100);// 向文件寫入用戶輸入的數據outfile << data << endl;cout << "Enter your age: "; cin >> data;cin.ignore();// 再次向文件寫入用戶輸入的數據outfile << data << endl;// 關閉打開的文件outfile.close();// 以讀模式打開文件ifstream infile; infile.open("afile.dat"); cout << "Reading from the file" << endl; infile >> data; // 在屏幕上寫入數據cout << data << endl;// 再次從文件讀取數據,并顯示它infile >> data; cout << data << endl; // 關閉打開的文件infile.close();return 0;
}

當上面的代碼被編譯和執行時,它會產生下列輸入和輸出:
$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9
注意

流操作符也是相對于計算機而言的,計算機是可以賦值和改變的左值,在左邊,所以從外部讀取數據到計算機(內存中),使用的流操作符是<< ;同理,從計算機(內存中)輸出到其他設備(屏幕),使用的流操作符是 >>,數據的方向是從內存到外部設備,所以箭頭朝右邊,非常形象。

在這里插入圖片描述
在這里插入圖片描述

#include "iostream"
#include "fstream"
using namespace std;//向文件內部寫入數據,并將數據讀出
void file_wr(void)
{char data[100];//向文件寫入數據ofstream outfile;outfile.open("test.txt");cout << "Write to the file" << endl;cout << "Enter your name:" << endl;cin.getline(data, 100);outfile << data << endl;cout << "Enter your age:" << endl;cin >> data;cin.ignore();outfile << data << endl;outfile.close();//從文件讀取數據ifstream infile;infile.open("test.txt");cout << "Read from the file" << endl;infile >> data;cout << data << endl;infile >> data;cout << data << endl;infile.close();
}//將數據從一文件復制到另一文件中
void file_copy(void)
{char data[100];ifstream infile;ofstream outfile;infile.open("test.txt");outfile.open("test_1.txt");cout << "copy from test.txt to test_1.txt" << endl;while (!infile.eof()){infile >> data;cout << data << endl;outfile << data << endl;}infile.close();outfile.close();
}//測試上述讀寫文件,與文件數據復制
int main()
{file_wr();file_copy();return 0;
}

當上面的代碼被編譯和執行時,它會產生下列輸入和輸出:
$./a.out
Writing to the file
Enter your name:
John
Enter your age:
20
Reading from the file
John
20
copy from test.txt to test_1.txt
John
20

2.異常處理

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

#include <iostream>
using namespace std;double division(int a, int b)
{if( b == 0 ){throw "Division by zero condition!";}return (a/b);
}int main ()
{int x = 50;int y = 0;double z = 0;try {z = division(x, y);cout << z << endl;}catch (const char* msg) {cerr << msg << endl;}return 0;
}

由于我們拋出了一個類型為 const char* 的異常,因此,當捕獲該異常時,我們必須在 catch 塊中使用 const char*。當上面的代碼被編譯和執行時,它會產生下列結果:
Division by zero condition!

在這里插入圖片描述
在這里插入圖片描述

3.動態內存

在這里插入圖片描述
在這里插入圖片描述

#include <iostream>
using namespace std;int main ()
{double* pvalue  = NULL; // 初始化為 null 的指針pvalue  = new double;   // 為變量請求內存*pvalue = 29494.99;     // 在分配的地址存儲值cout << "Value of pvalue : " << *pvalue << endl;delete pvalue;         // 釋放內存return 0;
}

在這里插入圖片描述

#include <iostream>
using namespace std;int main()
{int **p;   int i,j;   //p[4][8] //開始分配4行8列的二維數據   p = new int *[4];for(i=0;i<4;i++){p[i]=new int [8];}for(i=0; i<4; i++){for(j=0; j<8; j++){p[i][j] = j*i;}}   //打印數據   for(i=0; i<4; i++){for(j=0; j<8; j++)     {   if(j==0) cout<<endl;   cout<<p[i][j]<<"\t";   }}   //開始釋放申請的堆   for(i=0; i<4; i++){delete [] p[i];   }delete [] p;   return 0;
}

0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7
0 2 4 6 8 10 12 14
0 3 6 9 12 15 18 21

在這里插入圖片描述

#include <iostream>
using namespace std;class Box
{public:Box() { cout << "調用構造函數!" <<endl; }~Box() { cout << "調用析構函數!" <<endl; }
};int main( )
{Box* myBoxArray = new Box[4];delete [] myBoxArray; // 刪除數組return 0;
}

如果要為一個包含四個 Box 對象的數組分配內存,構造函數將被調用 4 次,同樣地,當刪除這些對象時,析構函數也將被調用相同的次數(4次)。
當上面的代碼被編譯和執行時,它會產生下列結果:

調用構造函數!
調用構造函數!
調用構造函數!
調用構造函數!
調用析構函數!
調用析構函數!
調用析構函數!
調用析構函數!

class A
{private:char *m_cBuffer;int m_nLen;public:A(){ m_cBuffer = new char[m_nLen]; }~A() { delete [] m_cBuffer; }
};
A *a = new A[10];// 僅釋放了a指針指向的全部內存空間 但是只調用了a[0]對象的析構函數 剩下的從a[1]到a[9]這9個用戶自行分配的m_cBuffer對應內存空間將不能釋放 從而造成內存泄漏
delete a;// 調用使用類對象的析構函數釋放用戶自己分配內存空間并且   釋放了a指針指向的全部內存空間
delete [] a;

在這里插入圖片描述

4.命名空間

本質上,命名空間就是定義了一個范圍。

在這里插入圖片描述

#include <iostream>
using namespace std;// 第一個命名空間
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二個命名空間
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
int main ()
{// 調用第一個命名空間中的函數first_space::func();// 調用第二個命名空間中的函數second_space::func(); return 0;
}

當上面的代碼被編譯和執行時,它會產生下列結果:
Inside first_space
Inside second_space
在這里插入圖片描述

#include <iostream>
using namespace std;// 第一個命名空間
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二個命名空間
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
using namespace first_space;
int main ()
{// 調用第一個命名空間中的函數func();return 0;
}

當上面的代碼被編譯和執行時,它會產生下列結果:
Inside first_space

using 指令也可以用來指定命名空間中的特定項目。例如,如果您只打算使用 std 命名空間中的 cout 部分,您可以使用如下的語句:

using std::cout;
在這里插入圖片描述

#include <iostream>
using namespace std;// 第一個命名空間
namespace first_space{void func(){cout << "Inside first_space" << endl;}// 第二個命名空間namespace second_space{void func(){cout << "Inside second_space" << endl;}}
}
using namespace first_space::second_space;
int main ()
{// 調用第二個命名空間中的函數func();return 0;
}

當上面的代碼被編譯和執行時,它會產生下列結果:
Inside second_space

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445455.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445455.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構和算法(02)---字符串(c++)

文章目錄目錄一.c風格的字符串與操作函數1.c風格字符串2.c風格字符串處理函數二.c中的字符串與操作函數1.c中的string類2.string類的基本操作3.string類的操作匯總目錄 數據結構&#xff1a; 邏輯結構&#xff1a;數組&#xff0c;棧&#xff0c;隊列&#xff0c;字符串&#x…

如何學習數據結構和算法——大佬文章匯總

第一篇 第二篇、 作者&#xff1a;左程云 我分別說一下國內和國外的行情。 國內的話&#xff0c;一般來講&#xff0c;工資高的公司在面試時算法和數據結構題目的比重較大&#xff0c;工資一般的公司比重較小。當然同樣公司的不同崗位&#xff0c;要求也會不同&#xff0c;…

c++基礎學習(13)--(STL、標準庫)

文章目錄目錄1. STL教程2.標準庫3.有用的資源目錄 1. STL教程 #include <iostream> #include <vector> using namespace std;int main() {// 創建一個向量存儲 intvector<int> vec; int i;// 顯示 vec 的原始大小cout << "vector size " &…

哈夫曼實現文件壓縮解壓縮(c語言)

寫一個對文件進行壓縮和解壓縮的程序&#xff0c;功能如下&#xff1a; ① 可以對純英文文檔實現壓縮和解壓&#xff1b; ② 較好的界面程序運行的說明。 介紹哈夫曼&#xff1a; 效率最高的判別樹即為哈夫曼樹 在計算機數據處理中&#xff0c;霍夫曼編碼使用變長編碼表對源…

c++基礎學習(11)--(模板、預處理器、信號處理)

文章目錄目錄1.模板2.預處理器3.信號處理目錄 1.模板 模板是泛型編程的基礎&#xff0c;泛型編程&#xff1a;以一種獨立于任何特定類型的方式 #include <iostream> #include <string>using namespace std;template <typename T> inline T const& Max…

java 面向對象必懂概述

&#xff08;這是大體框架&#xff0c;以后部分知識細寫&#xff09; 1 抽象過程 所有編程語言都提供抽象機制。可以認為&#xff0c;人們能解決的問題的復雜性直接取決于抽象的類型和質量。 類型&#xff1a;指的是所抽象的是什么。 匯編語言是對底層機器語言的輕微抽象…

c++基礎學習(12)--(多線程、Web編程)

文章目錄目錄1.多線程2.web編程目錄 1.多線程 #include <iostream> // 必須的頭文件 #include <pthread.h>using namespace std;#define NUM_THREADS 5// 線程的運行函數 void* say_hello(void* args) {cout << "Hello Runoob&#xff01;" <&…

《Head First設計模式》第九章(1)迭代器模式

迭代器模式 因為這一章涉及到兩個模式&#xff0c;內容有點多&#xff0c;還有一個組合模式留到下一篇寫吧。 有許多種方法可以把對象堆起來成為一個集合&#xff08;collection&#xff09;。你可以把它們放進數組、堆棧、列表或者是散列表&#xff08;Hashtable&#xff09…

Java內存模型常見問題

1.什么是內存模型&#xff1f; 在多核系統中&#xff0c;處理器一般有一層或者多層的緩存&#xff0c;這些的緩存通過加速數據訪問&#xff08;因為數據距離處理器更近&#xff09;和降低共享內存在總線上的通訊&#xff08;因為本地緩存能夠滿足許多內存操作&#xff09;來提高…

數據結構和算法(03)---棧和隊列(c++)

文章目錄目錄一.棧1.棧的基本操作2.使用C模板類實現棧二.隊列1.隊列的基本操作2.循環隊列**循環隊列順序存儲****循環隊列鏈式存儲**3.雙端隊列目錄 數據結構&#xff1a; 邏輯結構&#xff1a;數組&#xff0c;棧&#xff0c;隊列&#xff0c;字符串&#xff0c;樹&#xff0c…

索尼XB950N1 震撼人心的重低音

雖然題目是震撼人心的重低音&#xff0c;但是低音可以通過app調節&#xff0c;所以我們可以用這個耳機聽各種類型的歌曲。 索尼XB950N1與XB950B1非常相似&#xff0c;但索尼XB950N1提供了主動降噪&#xff0c;續航稍長一些。從藍牙3.0升級到了藍牙4.1&#xff0c;改善了傳輸范…

數據結構和算法(04)---數組,動態內存,vector(c++)

文章目錄目錄數組1.數組的申明2.數組的初始化3.二維數組4.指向數組的指針5.傳遞數組給函數動態內存1.new &#xff0c;delete運算符2.數組的動態內存分配vector1.vector基本操作2.vector使用3.vector動態二維數組 初始化和賦值目錄 數據結構&#xff1a; 邏輯結構&#xff1a;數…

數據結構和算法(05)---鏈表(c++)

文章目錄目錄鏈表的基本概念1.數組和鏈表鏈表的使用1.鏈表的簡單使用2.鏈表的進階使用3.鏈表的高階使用4.鏈表的其他操作鏈表容器list1.list介紹2. list使用3. list與vector之間的區別4.list例子代碼目錄 數據結構&#xff1a; 邏輯結構&#xff1a;數組&#xff0c;棧&#xf…

論文閱讀 狀態壓縮

狀態壓縮 Abstract 信息學發展勢頭迅猛&#xff0c;信息學奧賽的題目來源遍及各行各業&#xff0c;經常有一些在實際應用中很有價值的問題被引入信息學并得到有效解決。然而有一些問題卻被認為很可能不存在有效的(多項式級的)算法&#xff0c;本文以對幾個例題的剖析&#xf…

數據結構和算法(06)---二叉樹(c++)

文章目錄目錄二叉樹1.二叉樹的基本概念2.二叉樹的應用和時間復雜度3.二叉樹的插入4.二叉樹的查找5. 二叉樹的遍歷6.二叉樹的刪除二叉樹的基本操作1.二叉樹的基礎操作2.代碼實現創建二叉樹和三種遍歷二叉樹的方法目錄 數據結構&#xff1a; 邏輯結構&#xff1a;數組&#xff0c…

如何轉載CSDN博客

前言 對于喜歡逛CSDN的人來說&#xff0c;看別人的博客確實能夠對自己有不小的提高&#xff0c;有時候看到特別好的博客想轉載下載&#xff0c;但是不能一個字一個字的敲了&#xff0c;這時候我們就想快速轉載別人的博客&#xff0c;把別人的博客移到自己的空間里面&#xff0c…

程序員歌曲推薦

更多的時候&#xff0c;不光是電腦和鍵盤陪著我們度過一天&#xff0c;耳機和音樂也成了IT人生活中必不可少的一部分 上班和下班的路上&#xff0c;心情失落時&#xff0c;失眠時&#xff0c;甚至是工作時都可能會聽音樂&#xff0c;讓音樂為我們療傷&#xff0c;讓精神得以放…

如何在博客內添加音樂

<center> <iframe border"0" width"480" height"640" src"//music.163.com/outchain/player?type0&amp;id448977181;auto1&amp;height430"> </iframe> </center> 將代碼復制到markdown編輯器里&am…

CSDN寫博客(字體顏色、大小)

markdown里面的標記語言可以使用標簽對來實現對文本文字顏色大小信息的控制。下面給出幾個實例&#xff1a; 黑體字示例 微軟雅黑示例 華文彩云示例 color#00ffff size可以根據實際大小進行設置&#xff0c;一般不超過7。 紅色字體CSDN 紅色字體CSDN 使用十六進制顏色值 …

bose qc30 安靜的城市是什么樣子

使用感受 網友1&#xff08;20歲&#xff09;&#xff1a; 當你帶著這個耳機聽音樂的時候&#xff0c;有一種感覺&#xff0c;感覺這個世界都是你歌曲里的MV&#xff0c;這個枯燥乏味的世界都被賦予了你心中的那份情感&#xff0c;這種感覺&#xff0c;真的很棒 網友2&#…