c++語法大全筆記(一)

来源:https://www.cnblogs.com/ITXiaoAng/archive/2019/10/24/11735199.html
-Advertisement-
Play Games

[TOC]   c++是一種中級語言,是c的擴充,是一種面向對象的程式設計語言,可以運行到多個平臺。這裡直接講語法。   基礎c++模板: javascript 函數類型 函數名(參數表);例如: int max(int x,int y,int z); int ...


目錄

  c++是一種中級語言,是c的擴充,是一種面向對象的程式設計語言,可以運行到多個平臺。這裡直接講語法。

  基礎c++模板:

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}



一:初級知識

1.輸入輸出

  標準輸入輸出流cout和cin,分別代表輸入流對象和輸出流對象,在頭文件iostream中定義。鍵盤和顯示器是電腦的標準輸入輸出設備,標準流是直接不需要打開文件就可以操作的流式文件。

  輸出:cout和輸出運算符<<配合使用,<<作為輸出信息的"插入運算符",可以輸出多個輸出項,把內容依次插入到輸出流cout中,不需要類型判斷。

  輸入:cin和輸入運算符>>配合使用,>>作為輸入信息"提取運算符",可以輸入多個輸出項,從輸入設備鍵盤提取數據到cin中

  endl(end of line)代表回車換行操作。

   c++允許對變數的聲明放在程式的任何位置(但必須在使用該變數之前)。

2.用const定義常變數

  c語言的#define只是預編譯時進行的字元置換,不占用記憶體單元。而c++中用const定義常變數,具有變數的屬性,有數據類型,占用存儲單元,可以用地址指向它,在程式運行過程中的值是固定的。

3.函數定義和聲明

  在c++中。如果函數調用的位置在函數定義之前,則要求在函數調用之前必須對所調用的函數作函數原型聲明。一般形式是:

# 函數類型 函數名(參數表);例如:
int max(int x,int y,int z);
int max(int,int,int);

在編譯時只檢查參數類型,不檢查參數名。

4.函數的重載

  c++允許在同一作用域中用同一函數名定義多個函數,這些函數的參數個數和參數類型不相同,用來實現不同的功能。,這就是函數的重載,即一個函數名多用。

  下麵是一個例子:

# 第一個函數
int a(int a,int b){}
# 第二個函數
float a(float a,float b){}
# 第三個函數
long a(long a,long b){}

  這裡要註意的是,參數的個數和類型至少有一個不同,返回值可以相同也可以不同,但不允許參數個數和類型相同而只有返回值不同。

5.函數模板

  這個函數模板就是建立一個通用函數,這個函數的函數類型和形參類型不具體指定,用一個虛擬的類型代表,在調用函數時系統會根據實參的類型來取代模板中的虛擬類型,實現了不同函數的功能。定義模板的一般形式為:

# template <typename T1,typename T2,typename T3> 或者:
# template <class T1,class T2,class T3>



  下麵是一個例子:

template <typename T>
T show(T a,T b){}

   使用函數模板比函數重載更方便,更簡單,但是只適合函數的參數個數相同而類型不同,且函數體相同的情況。

6.有預設參數的函數

  c++在函數調用時給形參一個預設值,就減少了重覆。實參個數和形參個數不需要相同。但是預設參數要放在形參列表中的最右端,否則可能就會被覆蓋,或者參數不夠而報錯。

  要註意的是必須在函數調用之前在函數定義(定義在調用前)或者函數聲明(定義在調用後)進行給出預設值。而且定義和聲明都給預設值的情況下,取聲明的值,因此最好只在函數聲明時指定預設值

   一個函數不能既作為重載函數,又作為有預設參數的函數,會出現二義性。

7.變數的引用

  在c++中,變數的引用就是變數的別名。如下:

int a;
int &b = a; #聲明b是一個整型變數的引用,初始值為a

  這裡的&是"引用聲明符",並不代表地址,在聲明一個引用時,必須同時進行初始化,代表哪一個變數。

  在建立引用時只有聲明,沒有定義。


  引用的註意事項:

  (1)引用必須與某一種類型的數據相聯繫。

  (2)引用與其所代表的變數共用同一記憶體空間。

  (3)區分&a是聲明引用變數還是取地址,就看前面有沒有類型符。

  (4)可以給一個變數聲明多個引用。

  (5)引用在初始化後不能再被重新聲明為另一個變數的別名。

8.變數的引用作為函數參數

  c++之所以增加"引用",是為了利用它作為函數參數,是為了讓函數的數據傳遞更方便。函數的參數傳遞只要有以下兩種情況。

  將變數的引用作為形參

  c++把變數的引用作為函數形參,就可以指向同一地址單元。對引用型形參的初始化是在函數調用時通過虛實結合實現的。

  引用和使用指針變數做函數形參的區別

  使用引用不必使用指針變數,就不需要另外開闢記憶體空間,調用時實參不必加&,系統直接傳的是實參的地址,也不必使用指針運算符*。

   引用細節

  (1)不能建立void的引用。

  (2)不能建立引用的數組。

  (3)可以將變數的引用的地址賦給一個指針,此時指針指向的是原來的變數。但是不能直接建立指向引用類型的指針變數。

int a = 2;
int &b = a;
int *p = a; #p相當於a變數的地址

  (4)可以建立指針變數的引用

int i = 3;
int *b = &a;
int* &pt= b #pt相當於b

  (5)可以用const對引用加以限定,不允許改變引用的值

int i = 3;
const int &a = i; #聲明常引用,不允許改變i的值

  (6)可以用常量或表達式對引用進行初始化,但此時必須用const做聲明

int i = 3;
const &a = i + 2;

上面的const &a = i + 2;語句相當於:

int temp = i + 2;     #臨時變數在內部實現,用戶不能訪問
const int &a = temp;

也可以用不同類型的變數進行初始化:

double d = 3.252;
const int &a = d;

相當於:

int temp = d;
const int &a = temp;

此時a的值為3.

上面是c++的基礎,之後的文章會向大家介紹c++的一些高級的語法。


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

-Advertisement-
Play Games
更多相關文章
  • springsecurity舊版本自定義設置用戶密碼角色 protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("ad ...
  • redis相信大家都很熟悉了,和memcached一樣是一個高性能的key-value資料庫,至於什麼是緩存伺服器,度娘都有很明白的介紹了,我在這裡就不一一介紹了。 那我們一般什麼情況下才會使用緩存伺服器呢?可不是什麼情況都需要的哦,一般來說是在需要頻繁對一個欄位讀取的時候才會需要將這個欄位放入到緩 ...
  • 不管你是做數據分析,還是網路爬蟲,Web 開發、亦或是機器學習,你都離不開要和資料庫打交道,而 MySQL 又是最流行的一種資料庫,這篇文章介紹 Python 操作 MySQL 的5種方式,你可以在實際開發過程中根據實際情況合理選擇。 1、MySQLdb MySQLdb又叫MySQL-python ...
  • 一、模板類型錯誤: 錯誤原因:在models中漏掉了return: 【這裡】加上return即可。 二、url相關錯誤 靜態文件無法訪問,如樣式出不來 css樣式總出不來,折騰了一個多小時,原來,urlpatterns 寫成這樣: 我把 [登錄註冊] url後面也寫成 = 而並非+= ,這就造成了u ...
  • spring註解之@Import 【1】@Import ​ 參數value接收一個Class數組,將你傳入的類以全類名作為id加入IOC容器中 ​ 比較簡單,此處不做詳細解釋 【2】ImportSelector ​ ImportSelector強調的是復用性,使用它需要創建一個類實現ImportSe ...
  • # Eureka錯誤解決方法 ## security.basic.enabled 配置過時或不可用預設情況下:用戶名:user密碼:啟動應用在控制台會輸出,如下圖: 也可以通過如下屬性配置:spring.security.user.namespring.security.user.password如 ...
  • [TOC] Event事件 用來控制線程的執行 出現 ,就會把這個線程設置為False,就不能執行這個任務; 只要有一個線程出現 ,就會告訴Event對象,把有 的用戶全部改為True,剩餘的任務就會立馬去執行。由一些線程去控制另一些線程,中間通過Event。 進程池與線程池 1. 進程池與線程池是 ...
  • Go語言基礎之數組 本文主要介紹Go語言中數組(array)及它的基本使用。 Array ( 數組 ) 數組是同一種數據類型元素的集合。 在Go語言中,數組從聲明時就確定,使用時可以修改數組成員,但是數組大小不可變化。 基本語法: 數組定義: 比如: , 數組的長度必須是常量,並且長度是數組類型的一 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...