Language/C++ [C++] 생성자와 소멸자/인자가 있는 생성자/인라인 함수/const 함수
  • 728x90
    반응형

     

     

     

    C++


     

     

    생성자와 소멸자

    🎯 생성자의 특징

    • 반환형이 없다.
    • 함수 이름이 클래스와 동일.
    • 객체가 생성될 때 자동으로 호출되는 함수이다.

     

    🔔 예) 생성자 사용

     

    실행 결과

     

    • 생성자의 순서는 생성된 순서대로 실행된다.
    • 소멸자의 순서는 생성자의 역순이다.

     

    🔔 예) 소멸자 사용

     

    실행 결과

    • 인자가 없는 생성자를 디폴트 생성자라고 한다.
    • 소멸자는 인자가 없는 type 밖에 없다.

     

     

     

    인자가 있는 생성자

    🔔 예 )

     

     

    실행 결과

     

    복사 생성자를 사용하지 않으면 Binary Copy 를 해준다.

    Point a;          // 디폴트 생성자 발동

    Point b = a;    // copy 복사 생성자 발동

     

    Binary 복사는 포인터를 사용할경우 소멸되면서 동적할당을 delete 시킬경우 복 사된 객체가 포인터 주소를 잃어버리게 됨으로 문제가 될 수 있다.

     

     

    🔔 예) 멤버 초기화 리스트를 사용한 초기화

     

    실행 결과

     

     

    🔔 예) 임시 객체를 전달하기

     

     

    실행 결과

    • class 안에 static 으로 변수를 선언하면 class 들 간의 전역변수 로 활용된다.

     

    🔔 예) 정적 멤버를 사용한 객체 수 세기

     

     

    실행 결과

     

     

     

     

    인라인 함수

    🔔 예) 인라인 함수를 사용하는 main()함수

     

     

    🔔 예) 인라인 함수를 사용하는 main() 함수 실제

     

    • 일반적인 함수라면 실행의 흐름이 다른 함수로 넘어갔다가 돌아오는 작업이나, 인자를 복사하는 과정에서 부하(Overhead)가 발생하게 된다.
    • 인라인 함수를 사용하면 이런 작업들이 불필요하게 되므로 시간을 벌 수 있는 것이다.

     

    🎯 가이드 라인

    • 함수의 내용이 몇 줄 정도로 아주 짧은 경우에만 인라인 함수로 만들자.

     

    🎯 인라인 함수를 만드는 법

    • 클래스의 내부에 정의한 멤버 함수들은 모두 자동으로 인라인 함수가 된다.
    • 클래스의 외부에 정의한 멤버 함수는 함수의 정의 앞에 inline 키워드를 추가한다.

     

    🔔 예) 클래스의 정의 – 외부에서 인라인 함수 만들기

     

    • 함수의 정의 앞쪽에 inline 키워드를 붙여주는 것이 함수를 인라인으로 만드는 데 필요한 모든 것 이다.

     

    💡 인라인 함수는 헤더 파일에 넣는 것을 규칙처럼 생각하는 것이 좋다.
    분할 컴파일 일 경우 obj 파일 생성시 inline이 삽입되므로 link전에 발생한다.
    그러므로 inline함수는 헤더 파일에 있어야 한다.

     

     

     

     

    Const 함수

    • 멤버 변수의 값을 변경하지 않는 멤버 함수 에 사용.

     

    💡 Const 로 만드는 것은 어떤 의미가 있을까 ?

    • 다른 개발자가 "아, 이 함수는 멤버 변수의 값을 변경하지 않는구나" 라고 생각하게 만든다.
    • 실수로 멤버 변수의 값을 바꾸려고 하면, 컴퓨터가 오류 메시지를 통해서 알려준다.
    • Const 객체를 사용해서 이 함수를 호출할 수 있다.

    const Point pt(100, 100);

     

    • 기본 타입의 변수가 Const라면 그 변수의 값을 바꿀 수가 없었는데, 객체가 Const인 경우에는 해당 객체의 멤버 변수의 값을 바꿀 수가 없다.

     

    🔔 예) class 멤버의 static 함수

    • class 멤버의 static 함수 에 한해서 객체 선언없이 스코프( : : )연산 으로 함수 호출이 가능하다.

     

    실행 결과

     

     

    🔔 예) 함수포인터 연습

     

    (z1.*test)();    // 함수 포인터 호출

    • z1 : 어떤 객체의 멤버 함수를 호출할지 지정한다.
    • *test : 함수 포인터에 *을 붙여서 가리키고 있는 멤버 함수를 의미하게 만든다.
    • z1.*test 가 먼저 해석되도록 만들기 위해서 괄호로 씌워준다.

     

    실행 결과

     

     

    🔔 예) 배열에서의 생성자와 소멸자

    <point.h>

     

    <point.cpp>

     

    <main.cpp>

     

    실행 결과

     

     

     

     

    728x90
    반응형
상단으로