C++ 中的運算子

Jinku Hu 2023年10月12日
  1. C++ 語言提供的常用運算子
  2. C++ 中的過載操作
C++ 中的運算子

本文將演示如何在 C++ 中使用運算子的多種方法。

C++ 語言提供的常用運算子

運算子是 C++ 程式設計中表示式的重要組成部分。它們提供對提供的運算元進行的不同操作,評估結果通常由程式設計師根據需要使用。我們可以將運算元粗略地分為兩種型別:普通運算子和特殊運算子。通用運算子幾乎是大多數程式語言中普遍實現的操作,其中包括算術、邏輯、比較、賦值、成員訪問運算子等。

與代數中的規則類似,當多個運算子組成表示式時,存在優先順序和結合性特徵。我們將在本文中總結其中的一些規則,但完整的描述應參考語言文件和運算子優先順序表。請注意,基本算術運算的優先順序和結合性規則類似於常見的數學規則。因此,以下示例中的表示式輸出整數 2010,而不是 6030

#include <iostream>

using std::cout;
using std::endl;

int main() {
  cout << 10 + 2 * 5 << endl;
  cout << 40 - 20 - 10 << endl;

  return EXIT_SUCCESS;
}

輸出:

20
10

程式設計師可以使用括號來覆蓋優先順序和結合性的一般規則,就像在代數中所做的那樣。每個帶括號的複合表示式將被視為一個單獨計算的單元。使用指標演算法時的常見錯誤之一是遺漏括號。

如果我們使用指標算術加解引用操作訪問陣列中的元素,我們需要將算術一放在括號中。否則,給定指標指向的值將增加運算元而不是指標本身,因為解引用運算子的優先順序高於加法。

#include <iostream>

using std::cout;
using std::endl;

int main() {
  int vec[] = {10, 22, 63, 14};
  cout << *vec + 2 << endl;
  cout << *(vec + 2) << endl;

  return EXIT_SUCCESS;
}

輸出:

12
63

C++ 中的過載操作

在 C++ 語言中可以遇到的最強大的功能之一是,它允許程式設計師定義在使用者定義的物件(如類)上呼叫運算子時應如何操作。由於此功能為給定運算子提供替代操作,因此稱為過載運算子。但是,請注意,無法通過實現過載運算子來修改運算元的數量和優先順序。

以下程式碼片段宣告瞭一個 Person 類,該類包含兩個字串資料成員,併為此型別過載了 + 運算子。過載運算子的實現類似於具有特殊名稱的其他類函式,以 operator 關鍵字開頭,後跟運算子符號本身。這些函式可以有返回型別和引數列表。請注意,運算子過載的限制之一是程式設計師不能建立像 $>!! 這樣的新運算子。

#include <iostream>
#include <string>
#include <utility>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

class Person {
 public:
  Person(string s1, string s2) : name(std::move(s1)), surname(std::move(s2)) {}

  Person operator+(const Person &p) {
    Person ret(name + p.name, surname + p.surname);
    return ret;
  }

  void printPerson() { cout << name << " " << surname << endl; }

 private:
  string name;
  string surname;
};

int main() {
  Person P1("Buddy", "Rich");
  Person P2("Lady", "Bee");
  P1 = P1 + P2;

  P1.printPerson();

  exit(EXIT_SUCCESS);
}

輸出:

BuddyLady RichBee
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Operator