(0830) C++ 학습일지 (2)

런치·2023년 8월 31일
0

C++

목록 보기
2/14
post-thumbnail

연산자(Operator) :
특정한 작업을 수행하는 기호 또는 함수로 사용자 정의 연산자도 생성 가능

  1. 산술 연산자 (Arithmetic Operators):

    • +: 덧셈
    • -: 뺄셈
    • *: 곱셈
    • /: 나눗셈
    • %: 나머지
  2. 할당 연산자 (Assignment Operators):

    • =: 대입
    • +=: 덧셈 후 대입
    • -=: 뺄셈 후 대입
    • *=: 곱셈 후 대입
    • /=: 나눗셈 후 대입
    • %=: 나머지 후 대입
  3. 비교 연산자 (Comparison Operators):

    • ==: 동등
    • !=: 부등
    • <: 작다
    • >: 크다
    • <=: 작거나 같다
    • >=: 크거나 같다
  4. 논리 연산자 (Logical Operators):

    • &&: 논리적 AND
    • ||: 논리적 OR
    • !: 논리적 NOT
  5. 증감 연산자 (Increment and Decrement Operators):

    • ++: 증가
    • --: 감소
  6. 비트 연산자 (Bitwise Operators):

    • &: 비트 AND
    • |: 비트 OR
    • ^: 비트 XOR
    • ~: 비트 NOT
    • <<: 비트를 왼쪽으로 이동
    • >>: 비트를 오른쪽으로 이동
  7. 조건(삼항) 연산자 (Conditional (Ternary) Operator):

    • condition ? value_if_true : value_if_false: 조건이 참이면 첫 번째 값, 거짓이면 두 번째 값 반환
  8. 멤버 접근 연산자 (Member Access Operators):

    • .: 멤버 접근 (객체)
    • ->: 멤버 접근 (포인터)
  9. 포인터 연산자 (Pointer Operators):

    • *: 포인터 역참조
    • &: 주소 참조
  10. 타입 변환 연산자 (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) :

  • 함수에 전달되는 인자의 메모리 주소를 전달
    -> 함수 내부에서 인자의 값이 변경되면 원본 변수도 변경
  • 호출된 함수 안에서 매개변수로 전달된 레퍼런스를 통해 값에 접근하면,
    원본 변수의 값이 직접 수정
profile
점심을 안먹음

0개의 댓글