연산자(Operator) :
특정한 작업을 수행하는 기호 또는 함수로 사용자 정의 연산자도 생성 가능
산술 연산자 (Arithmetic Operators):
+
: 덧셈-
: 뺄셈*
: 곱셈/
: 나눗셈%
: 나머지할당 연산자 (Assignment Operators):
=
: 대입+=
: 덧셈 후 대입-=
: 뺄셈 후 대입*=
: 곱셈 후 대입/=
: 나눗셈 후 대입%=
: 나머지 후 대입비교 연산자 (Comparison Operators):
==
: 동등!=
: 부등<
: 작다>
: 크다<=
: 작거나 같다>=
: 크거나 같다논리 연산자 (Logical Operators):
&&
: 논리적 AND||
: 논리적 OR!
: 논리적 NOT증감 연산자 (Increment and Decrement Operators):
++
: 증가--
: 감소비트 연산자 (Bitwise Operators):
&
: 비트 AND|
: 비트 OR^
: 비트 XOR~
: 비트 NOT<<
: 비트를 왼쪽으로 이동>>
: 비트를 오른쪽으로 이동조건(삼항) 연산자 (Conditional (Ternary) Operator):
condition ? value_if_true : value_if_false
: 조건이 참이면 첫 번째 값, 거짓이면 두 번째 값 반환멤버 접근 연산자 (Member Access Operators):
.
: 멤버 접근 (객체)->
: 멤버 접근 (포인터)포인터 연산자 (Pointer Operators):
*
: 포인터 역참조&
: 주소 참조타입 변환 연산자 (Type Conversion Operators):
static_cast
: 정적 타입 변환dynamic_cast
: 동적 타입 변환 (상속 관련)const_cast
: 상수 제거 변환reinterpret_cast
: 재해석 변환연산자 중복 (Operator Overloading) :
기존의 연산자를 사용자 정의 데이터 유형에 대해 새로 정의하거나 확장
예를 들어, 두 개의 객체를 더하는 연산자 +
를 사용자 정의 클래스에 대해 사용하고자 할 때, 연산자 중복을 이용할 수 있습니다.
//연산자 중복
std::cout << "Hello World" << std::endl;
operator<<(std::cout,"Hello World").operator<<(std::endl);
함수 중복(Function Overloading):
같은 이름의 함수를 여러 번 정의하는 기능
동일한 이름의 함수를 다양한 매개변수 목록과 타입에 대해 정의 가능
호출 시 전달되는 인자에 따라 적절한 함수가 자동으로 선택되어 실행
예를 들어, 동일한 함수 이름으로 여러 개의 함수를 정의하여 다양한 데이터 유형에 대해 동작을 제공할 수 있습니다.
//<complex.h>
#ifndef COMPLEX_H
#define COMPLEX_H
class Complex{
private:
double re;
double im;
public:
Complex();
Complex(double re);
Complex(double re, double im);
~Complex();
double real();
double imag();
void real(double re);
void imag(double im);
};
위에서는 Complex
함수를 인자가 없는 Complex()
와
실수형을 받는 Complex(double re)
와 Complex(double re, double im)
로 만들어 준었다.
Reference(aliasing) vs pointer
레퍼런스(참조):
반드시 초기화되어야 하며 선언과 동시에 변수에 바인딩
초기화되면 다른 변수에 바인딩되지 않음
자동으로 간접 참조
되므로 포인터 연산이 필요하지 않음주로 함수의 매개변수로 전달
하거나 함수의 반환 값으로 사용
포인터:
주소를 저장하는 변수
로 직접적인 메모리 주소를 가리킴널 포인터(NULL 포인터)
로 초기화할 수 있습니다.여러 변수들과 공유
될 수 있습니다.간접 참조
, 값을 변경할 수 있음
동적 메모리 할당
, 배열 처리
, 객체의 동적 변화
의 경우에 더 적합값에 의한 호출 (Call by value)
인자의 값을 복사
하여 함수 내부에 새로운 변수로 사용하므로,원본 변수는 영향을 받지 않음
로컬 변수로 취급
참조에 의한 호출 (Call by Reference) :
메모리 주소를 전달
인자의 값이 변경되면 원본 변수도 변경