C++의 연산자
이 기사에서는 C++에서 연산자를 사용하는 방법에 대한 여러 방법을 보여줍니다.
C++ 언어로 제공되는 일반 연산자
연산자는 C++ 프로그래밍에서 표현식의 필수 부분입니다. 이들은 제공된 피연산자에 대해 수행되는 다른 작업을 제공하며 평가 된 결과는 일반적으로 프로그래머가 필요에 따라 활용합니다. 피연산자를 일반 연산자와 특수 연산자의 두 가지 유형으로 느슨하게 나눌 수 있습니다. 공통 연산자는 대부분의 프로그래밍 언어에서 거의 보편적으로 구현되는 작업이며 여기에는 산술, 논리, 비교, 할당, 멤버 액세스 연산자 등이 포함됩니다.
대수의 규칙과 유사하게 여러 연산자가 표현식을 구성 할 때 우선 순위 및 연관성 특성이 있습니다. 이 기사에서 이러한 규칙 중 일부를 요약 할 것이지만 전체 설명은 언어 문서 및 연산자 우선 순위 표를 참조해야합니다. 기본 산술 연산의 우선 순위 및 연관성 규칙은 일반적인 수학 규칙과 유사합니다. 따라서 다음 예제의 표현식은60
및30
대신20
및10
정수를 출력합니다.
#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
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