C++primer第一章

来源:https://www.cnblogs.com/wqy2002/archive/2022/05/25/16307439.html
-Advertisement-
Play Games

第一章 : 開始 1.1 編寫一個簡單的C++程式 要點:每個函數有且只能擁有一個main函數,且main的預設返回是一個int類型。 函數定義:返回類型,函數名,形參列表,函數體 ###1.1.1編譯 運行程式 ####程式源文件命名約定 無論使用命令行還是IDE(集成開發環境),都將代碼存放在一 ...


第一章 : 開始


1.1 編寫一個簡單的C++程式

要點:每個函數有且只能擁有一個main函數,且main的預設返回是一個int類型。
函數定義:返回類型,函數名,形參列表,函數體

1.1.1編譯 運行程式

程式源文件命名約定

無論使用命令行還是IDE(集成開發環境),都將代碼存放在一個或多個文件中,這些文件就是源代碼

編譯

在某個控制視窗中編譯程式(winsdows命令行linux命令行


1.2 初識輸入輸出

iostream庫:

istream:輸入流
ostream:輸出流
PS:一個流就是一個字元序列,是從IO設備讀出或寫入IO設備的。流(stream)表達的是,隨著時間的推移,字元是順序生成或消耗的。

標準輸入輸出

cin:標準輸入
cout:標準輸出
cerr和clog:標準錯誤
cout與cerr的區別:

1.cout:經過緩衝後輸出,預設情況下是顯示器。這是一個被緩衝的輸出,是標準輸出,並且可以重新定向
2.cerr不經過緩衝而直接輸出,一般用於迅速輸出出錯信息,是標準錯誤,預設情況下被關聯到標準輸出流,但它不被緩衝,也就說錯誤消息可以直接發送到顯示器,而無需等到緩衝區或者新的換行符時,才被顯示。一般情況下不被重定向
PS:緩衝區

實際代碼例子

#include<iostream>//頭文件,一般在main外部
using namespace std;//命名空間(namespace),通過使作用域運算符(::),來使用std空間的cout和cin
int main()
{
    int a,b;
    cout<<"Hello world"<<endl;//endl是操作符,作用是將與設備關聯的緩衝區中的內容刷到設備中
    cin>>a>>b;
    cout<<"a*b="<<a*b;//多個語句能和成為一個語句
    return 0;
}

向流中寫入寫出數據

"<<"(name:輸出運算符):左側的運算對象必須是ostream對象右側對象為需要列印的值。它會將右側的值給到ostream對象中。
">>"(name:輸入運算符):左側的運算對象必須是istream對象右側對象為需要輸入的值。它會將istream對象的值給到右側對象中。

WARNING

程式員在調試時常常添加列印語句。這一類語句應該保證“一直”刷新流。否則,如果程式崩潰,輸出還可能留在緩衝區中,從而導致關於程式崩潰位置的錯誤判斷。


1.3 註釋簡介

C++中的註釋的種類

1.當行註釋(//),以雙斜線開始,換行符結束,這種註釋可以包含任何文本內容和額外的數據雙斜線
2.界定符對註釋(/* */),可以包含除後界定符的任意內容

註釋界定符不能嵌套

/*
*註釋對/* */不能嵌套
*不能嵌套四個字會被認為是源碼,
*像剩餘程式一樣處理
*/
int main
{
    return 0;
}

1.4 控制流

1.4.1 while語句

說明

while反覆執行一段代碼,直到給定條件為
執行過程是交替檢測condition和執行關聯語句statement,直到condition為假

while(condition)
    statement

實例

從1~100的整數總和(複合賦值運算符

#include<iostream>
using namespace std;
int main()
{
    int sum=0;
    int i=0;
    while(i<=100)
    {
        sum+=i;//使用了複合賦值運算符
        ++i;//首碼遞增運算符
    }
    cout<<sum;
    return 0;
}

1.4.2 for語句

說明

for迴圈與while迴圈相比,將檢測變數 變數遞增等進行了簡化

for(init-statement;condition;expression)
    principal

實例

從1~100的整數總和

#include<iostream>
using namespace std;
int main()
{
    int sum=0;
    for(int i=0;i<=100;i++)
        sum+=i;
    cout<<sum;
    return 0;
}

1.4.3 讀取數量不定的輸入數據

當不知道需要對多少數進行操作是,可以使用istream對象作為條件配合迴圈

當istream對象作為條件時,其效果就是檢測流的狀態。如果流是有效的,即檢測成功。當遇到文件檢測符,或者遇到無效輸出時,istream對象的狀態變為無效,處於無效狀態的istream的對象,條件判斷為假。

PS:文件檢測符

1.Windows Ctrl+Z 後按Enter或Return
2.Unix and Mac OS X Ctrl+D

實例

計算輸入整數的和

#include<iostream>
using namespace std;
int main()
{
    int sum=0;
    int val=0;
    while (cin>>val)
    {
        sum+=val;
    }
    cout<<sum;
    return 0;
}

1.4.4 if語句

if語句用來支持條件執行

if(condition)
    principal_1
else 
    principal_2

實例

統計輸入中每個值連續出現了了多少次

#include<iostream>
using namespace std;
int main()
{
    int currval=0,val=0;
    if(cin>>currval)//讀取第一個數
    {
        int cnt=1;//保存當前值的個數
        while (cin>>val)//讀取剩餘的數
        {
            if(currval==val)
                cnt++;
            else 
            {
                cout<<currval<<" occurs"<<cnt<<" times"<<endl;
                currval=val;//記住新值
                cnt=1;//重置計數器
            }
        }
        cout<<currval<<" occurs"<<cnt<<" times"<<endl;//列印最後一個值的個數
    }
    return 0;
}

輸入:

42 42 42 42 42 55 62 100 100 100

輸出:

42 occurs5 times
55 occurs1 times
62 occurs1 times
100 occurs3 times

PS:運算符


1.5 類簡介

1.5.1 類

定義

在C++中,我們通過定義一個類(class)來定義自己的數據結構。
一個類定義了一個類型,以及與其關聯的一組操作。
類機制是C++最重要的特性之一,C++的最初的一個設計焦點就是能定義使用上像內置類型一樣自然的類類型(class type)
使用類時需要瞭解的事情:

1.類名是什麼?
2.它是在哪裡定義的?
3.它支持什麼操作?

關鍵概念:類定義了行為

類的創作者在創造類時定義了類的對象能進行的所有操作,使用一個類創建了一個對象時,這個對像能進行的行為就已經確定了。

實例

Sales_items類

假設已經存在了一個Sales_items類,存放在Sales_items.h頭文件
讀寫Sales_items

#include<iostream>
#include"Sales_item.h"//Sales_item類的相關操作都存放在這
using namespace std;
int main()
{
    Sales_items book;
    cin>>book;//進行了運算符重載(後面的博客有詳細講解)
    //讀入了ISBN號 售出的冊數 銷售價格
    cout<<book<<endl;
    //寫入了ISBN號 售出的冊數 總銷售額 平均價格
    return 0;
}

輸入:

0-201-70353-X 4 24.99

輸出:

0-201-70353-X 4 99.96 24.99

Sales_item 對象的加法

#include<iostream>
#include"Sales_item.h"
using namespace std;
int main()
{
    Sales_items item1,item2;
    cin>>item1>>item2;
    cout<<item1+item2<<endl;//進行了運算符重載,換句話說此+非彼+,和整數的加法不同
    return 0;
} 

輸入:

0-201-70353-X 3 20
0-201-70353-X 2 25

輸出:

0-201-70353-X 5 110 22

1.5.2 成員函數

什麼是成員函數(member function)

成員函數是定義為類的一部分的函數(類包含有成員函數),有時也稱為方法(method)

實例

#include<iostream>
#include"Sales_item.h"
using namespace std;
int main()
{
    Sales_item item1,item2;
    cin>>item1>>item2;
    //首先檢查item1和item2是否為同一本書
    if(item1.isbn()==item2.isbn)
    {
        cout<<item1+item2<<endl;
        return 0;//表示成功
    }
    cout<<"error";
    return -1;//表示失敗
}

1.6 書店程式

我們需要從一個文件中讀取銷售記錄,生成每本書的銷售報告,顯示售出冊數 總銷售額 平均售價。
假定書號相同的數據是聚集在一起的。

#include<iostream>
#include"Sales_item.h"
using namespace std;
int main()
{
    Sales_item total;//保存和的變數
    //讀入第一條交易記錄,並確定有數據可以處理
    if(cin>>total)
    {
        Sales_item trans;//保存下一條記錄的變數
	//讀入並處理剩餘交易記錄
        while (cin>>trans)
        {
	    //處理相同的書
            if(total.isbn==trans.isbn)
                total+=trans;//更新總銷售額
            else 
                {
                    cout<<total<<endl;
                    total=trans;//total現在變成下一本書的銷售額
                }
        }
        cout<<total<<endl;//列印最後一本書的銷售額
    }
    else 
    {
        cout<<"No date?!"<<endl;//錯誤警告
        return -1;
    }
    return 0;
}

特別鳴謝

xqy同學指導我使用了Editor.md,讓這個系列可以進行更新(邁出了第一步)。
hyf同學在排版和內容等方面提出了十分重要的意見。
註:這個系列會長期的更新下去,希望我寫的文章能對諸位有所幫助。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...