C++整理2

hwaityd發表於2024-10-20

語法規則

1. 命名規則

  • 概念:命名規則定義了在程式碼中如何命名變數、函式、類等識別符號。
  • 語法:識別符號必須以字母或下劃線開頭,後面可以跟字母、數字或下劃線。
  • 特點:遵循命名規則可以避免語法錯誤,提高程式碼的可讀性。

示例程式碼

// 正確的命名
int myVariable = 10;
float price_123 = 20.5;
MyClass myClassInstance;

// 錯誤的命名
int 1stVariable = 10; // 錯誤:以數字開頭
int my-variable = 10; // 錯誤:包含非法字元

2. 作用域

  • 概念:作用域決定了在程式的哪些部分可以訪問特定的變數或函式。
  • 函式原型作用域:在函式引數列表中定義的變數僅在該函式原型中可見。
  • 區域性作用域:在函式內部定義的變數僅在該函式內部可見。
  • 類作用域:在類定義中宣告的成員變數和成員函式僅在該類內部可見。
  • 名稱空間作用域:在名稱空間中定義的名稱僅在該名稱空間中可見。

示例程式碼

void myFunction(int param) { // param只在myFunction的作用域內可見
    int localVar = 5; // localVar只在myFunction的作用域內可見
}

class MyClass {
    int classVar; // classVar只在MyClass的作用域內可見

public:
    void classMethod() {
        int localVar = 5; // localVar只在classMethod的作用域內可見
    }
};

namespace MyNamespace {
    int namespaceVar = 5; // namespaceVar只在MyNamespace的作用域內可見
}

3. 作用域與可見性問題

  • 概念:當識別符號在不同的作用域中重名時,會發生遮蔽現象,導致外層作用域的識別符號在內層作用域中不可見。
  • 特點:合理管理作用域和可見性可以避免命名衝突,提高程式碼的可維護性。

示例程式碼

int globalVar = 10; // 全域性變數

void function() {
    int globalVar = 20; // 區域性變數遮蔽了全域性變數
    std::cout << globalVar << std::endl; // 輸出20
}

int main() {
    function();
    std::cout << globalVar << std::endl; // 輸出10,訪問全域性變數
    return 0;
}

4. 關鍵字使用:改變作用域

  • extern:用於宣告全域性變數或函式,告訴編譯器該變數或函式的定義在別的檔案或程式碼區域。
    • 使用規則extern通常用於在一個檔案中宣告另一個檔案中定義的全域性變數或函式。
  • static:用於宣告區域性靜態變數或靜態成員變數,其生命週期貫穿整個程式,且在該作用域內可見。
    • 在C中的使用static變數或函式只能在定義它的檔案內訪問。
    • 在C++中的使用static成員變數和成員函式可以在類的所有物件之間共享。

extern的使用規則

// file1.cpp
int a = 42; // 定義一個全域性變數a

// file2.cpp
extern int a; // 宣告a,告訴編譯器a的定義在別處
void function() {
    std::cout << a << std::endl; // 安全訪問a
}

static在C和C++中的使用

// C中的靜態全域性變數
static int staticGlobalVar = 10; // 只能在當前檔案中訪問

// C++中的靜態成員變數
class MyClass {
public:
    static int staticMemberVar; // 必須在類外初始化
};

int MyClass::staticMemberVar = 20; // 初始化靜態成員變數

void function() {
    static int localStaticVar = 30; // 只在function內可見,多次呼叫只初始化一次
}

這些規則和關鍵字確保了程式的組織結構和變數的生命週期,使得程式碼更加模組化和易於管理。

相關文章