(0901~0904) C++ 학습일지

런치·2023년 9월 10일
0

C++

목록 보기
4/14
post-thumbnail
  1. 도우미 함수 (helper func)
  1. 도우미 함수는 최종 사용자가 인스턴스화하지 않지만 내부적으로 다른 클래스 내에서 사용되는 유용한 기능을 제공하는 함수
  2. 함수가 클래스의 멤버가 아니라 다른 클래스인 경우 C++ 프로그램은 다른 목적으로 데이터를 인쇄하거나 사용하는 도우미 함수를 생성
  3. 도우미 함수는 일반적으로 클래스의 작성자가 제공해 클래스의 표현에 직접 액세스할 필요가 없다.

Compiler 가 생성해주는 Member func ( Default 생성자는 다른 생성자가 존재하면 생성안됨)

  1. 디폴트 생성자(Default Constructor):
    • 클래스에 생성자가 정의되지 않은 경우, 컴파일러는 디폴트 생성자를 자동으로 생성
    • 디폴트 생성자는 객체를 초기화
class Array {
public:
    Array() { // 디폴트 생성자
    }
};
  1. 복사 생성자(Copy Constructor):
    • 클래스의 객체가 다른 객체로 복사될 때, 컴파일러는 복사 생성자를 자동으로 생성.
    • 이 복사 생성자는 얕은 복사(shallow copy)를 수행하며, 필요에 따라 사용자 정의로 오버로딩할 수 있음
class Array {
public:
    Array(const Array& rhs) { // 복사 생성자
    }
};
  1. 대입 연산자 오버로딩(Assignment Operator Overloading):
    • 객체가 다른 객체에 대입될 때, 컴파일러는 대입 연산자를 자동으로 생성
    • 사용자 정의로 대입 연산자를 오버로딩하여 객체의 멤버 변수를 올바르게 복사하도록 할 수 있음
class Array {
public:
    Array& operator=(const Array& rhs) { // 대입 연산자 오버로딩
    }
};
  1. 소멸자(Destructor):
    • 클래스에 사용자 정의 소멸자가 없는 경우, 컴파일러는 기본 소멸자를 자동으로 생성
    • 소멸자는 객체가 파괴될 때 자동으로 호출되며, 메모리나 리소스의 정리를 수행하는 데 사용
class Array {
public:
    ~Array() { // 소멸자
    }
};

2 . Name Mangling

컴파일 과정에서 식별자(Identifier)는 같지만 다른 namespace에 속해 있거나, 다른 시그니쳐를 가지는 경우(ex. function overloading) 고유한 이름을 가지게 하기 위해 호출 규약(calling convention) 등에 따라서 함수나 변수의 이름을 컴파일러가 변경하는 것

C언어에서는 name magling이 없으므로 extern "C"를 사용하여 C++ 컴파일러(현재 실행중인 프로그램 체계)에게, C로 작성한 코드이니 C문법을 적용하여 컴파일하라는 의미를 알려준다. 정확히 말하면, C++의 변수 맹글링(오버로딩)아닌 C의 변수 맹글링(동일한 함수명 사용 문법, 오버로딩 하지 않음)을 적용하라는 의미

  1. ++a ,a++ 구현
    a++++a는 C++ 및 다른 C 기반 프로그래밍 언어에서 사용되는 증가 연산자(Increment Operator)입니다. 이 두 연산자는 변수의 값을 증가시키는 역할을 한다
  1. a++ (후위 증가 연산자, Post-increment):
    • a++는 변수 a의 현재 값을 사용한 후에 a를 1 증가
    • a의 현재 값을 반환하고, 그 다음에 a가 1 증가
int a = 5;
int b = a++; // b는 5가 되고, a는 6이 됨
  1. ++a (전위 증가 연산자, Pre-increment):
    • ++a는 변수 a를 1 증가시킨 후에 a의 증가된 값을 사용
    • a를 1 증가시킨 후에 그 증가된 값을 반환
int a = 5;
int b = ++a; // a와 b 모두 6이 됨
profile
점심을 안먹음

0개의 댓글