C++整理1

hwaityd發表於2024-10-20

C語言和C++的關係非常密切。C++是在C語言的基礎上發展起來的,C++對C語言進行了擴充套件,增加了物件導向的特性和其他一些功能。下面將詳細探討它們之間的關係和各個方面的區別。

  1. C語言與C++的區別
    程式設計正規化:

C語言:是一種程序導向的程式語言,強調功能模組的實現。
C++:除了支援程序導向程式設計外,還支援物件導向程式設計,強調資料和行為的封裝。
資料抽象:

C語言:透過結構體和函式實現資料抽象。
C++:引入了類和物件的概念,更加強調資料封裝和抽象。
繼承與多型:

C語言:沒有內建的繼承和多型特性。
C++:支援類的繼承和執行時多型(虛擬函式)。
標準庫:

C語言:標準庫較簡單,主要包括輸入輸出、字串處理等。
C++:擁有更為豐富的標準庫,包括STL(標準模板庫),提供資料結構和演算法的支援。
2. 程序導向與物件導向的區別
程序導向:

以函式為中心,程式透過函式的呼叫來執行。
強調操作和流程,資料與功能相對獨立。
程式碼的複用性較差,易產生程式碼重複。
物件導向:

以物件為中心,將資料和操作封裝在一起。
強調資料的封裝性、繼承性和多型性。
提高了程式碼的複用性和可維護性。
3. C++新語法(儲存結構)
引用
定義:引用是一個變數的別名,用於簡化變數的訪問。
特點:引用不佔用額外的空間,操作引用等同於操作原變數。

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int& ref = a; // ref是a的引用
    ref = 20;     // 修改ref也會修改a
    cout << "a = " << a << endl; // 輸出:a = 20
    return 0;
}
  1. 右值引用(C++11特性)
    定義:右值引用是一種新的引用型別,用於表示一個將要被移動(而不是複製)的物件。
    用途:主要用於實現移動語義,避免不必要的資源複製,提高效能。
#include <iostream>
#include <utility> // std::move
using namespace std;

class MyClass {
public:
    MyClass() { cout << "Constructor" << endl; }
    MyClass(const MyClass& other) { cout << "Copy Constructor" << endl; }
    MyClass(MyClass&& other) noexcept { cout << "Move Constructor" << endl; }

    // 為了演示
    void show() { cout << "Show function" << endl; }
};

void test(MyClass obj) { obj.show(); }

int main() {
    MyClass obj1;
    test(obj1); // 呼叫複製建構函式
    test(std::move(obj1)); // 呼叫移動建構函式
    return 0;
}
  1. 引用與指標的區別
    | 特性 | 引用| 指標 |
    | ------------ | ------------ | ------------ |
    | 定義 | 變數的別名 | 儲存變數地址的變數 |
    | 空間 | 不佔用額外空間 | 佔用4或8位元組(視平臺而定) |
    | 空值 | 必須初始化,不可空 | 可以為空 |
    | 語法 | 需解引用運算子 | 需使用解引用* |
    | 重新賦值 | 不可改變引用物件 | 可以重新賦值 |

  2. 引用陣列
    引用可以用來引用陣列,但使用時需注意語法。引用陣列本質上是對陣列的別名。

#include <iostream>
using namespace std;

void printArray(int (&arr)[5]) { // 引用陣列
    for (int i = 0; i < 5; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int myArray[5] = {1, 2, 3, 4, 5};
    printArray(myArray); // 傳遞陣列的引用
    return 0;
}
  1. bool型別: 概念、語法、特點及示例程式碼
    概念
    定義:型別是C++中用於表示真()和假()的基本資料型別。booltruefalse
    語法
    bool型別變數的宣告和初始化:
    cpp
    bool flag = true; // 宣告一個bool型別變數
    特點
    bool型別只能取兩個值:(1)和(0)。truefalse
    可以直接用於條件判斷。
    示例程式碼
#include <iostream>
using namespace std;

int main() {
    bool isEven = false;
    int number = 4;

    if (number % 2 == 0) {
        isEven = true; // 如果number是偶數,將isEven設定為true
    }

    cout << "Is the number even? " << (isEven ? "Yes" : "No") << endl; // 輸出結果
    return 0;
}
總結

C語言與C++在設計理念和語法上有顯著的區別。C++引入了物件導向的程式設計正規化,使得程式設計更加靈活和模組化。引用和指標的使用在C++中也提供了更高效的資源管理方式。型別的引入使得條件判斷更加清晰和直觀。理解這些概念對於深入學習C++至關重要。bool

相關文章