C++의 연산자

Jinku Hu 2023년10월12일
  1. C++ 언어로 제공되는 일반 연산자
  2. C++에서 오버로드 된 작업
C++의 연산자

이 기사에서는 C++에서 연산자를 사용하는 방법에 대한 여러 방법을 보여줍니다.

C++ 언어로 제공되는 일반 연산자

연산자는 C++ 프로그래밍에서 표현식의 필수 부분입니다. 이들은 제공된 피연산자에 대해 수행되는 다른 작업을 제공하며 평가 된 결과는 일반적으로 프로그래머가 필요에 따라 활용합니다. 피연산자를 일반 연산자와 특수 연산자의 두 가지 유형으로 느슨하게 나눌 수 있습니다. 공통 연산자는 대부분의 프로그래밍 언어에서 거의 보편적으로 구현되는 작업이며 여기에는 산술, 논리, 비교, 할당, 멤버 액세스 연산자 등이 포함됩니다.

대수의 규칙과 유사하게 여러 연산자가 표현식을 구성 할 때 우선 순위 및 연관성 특성이 있습니다. 이 기사에서 이러한 규칙 중 일부를 요약 할 것이지만 전체 설명은 언어 문서 및 연산자 우선 순위 표를 참조해야합니다. 기본 산술 연산의 우선 순위 및 연관성 규칙은 일반적인 수학 규칙과 유사합니다. 따라서 다음 예제의 표현식은6030대신2010정수를 출력합니다.

#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

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Operator