[c++] 객체 포인터, const, 객체와 함수

객체 포인터

  • 정적 메모리 할당
  • 동적 메모리 할당
Car myCar; // 정적 메모리 할당으로 객체 생성
Car *pCar = new Car(); // 동적 메모리 할당으로 객체 생성

객체 포인터를 사용한 멤버 접근

해당 연산자로 접근

pCar->speed = 100;
pCar->speedup( );

객체 포인터에 저장할 수 있는것

Car myCar;
Car *pCar = &myCar; // 객체 변수의 주소를 pCar에 할당

this 포인터

  • 자신을 가리키는 개체 포인터
  • 컴파일러에 의해 자동 생성
  • 멤버 변수, 매개변수 이름이 같을때 구분을 위해 사용

const 수식자

  • 변수 선언 앞에 붙여서 상수를 만드는 수식자

  • 상수 멤버 변수

  • 상수 멤버 함수

    • 객체를 변경하지 않는 함수

      void displaySpeed( ) const
      {
          cout << "자동차의 속도: " << speed < < endl;
      }
      
    • 멤버 변수 값을 변경이 불가능

    • 멤버 함수안에서 상수화되지 않은 함수를 호출하면 오류발생

    • 접근자를 상수 멤버 함수로 만드는것이 바람직하다.

  • 상수 객체

    • const를 객체에 붙이면 객체를 통해 멤버 변수 값을 변경할 수 없다.
    • 멤버 함수 호출 x, 상수 멤버 함수만 가능

객체와 연산자

  • 대입 연산자(=)
    • 객체끼리 복사 가능
  • 비교 연산자(==)
    • 정의해야만 사용이 가능 *연산자 중복(operate overloading)을 사용해 연산자를 수동으로 정의해 사용이 가능하다.

객체와 함수

  • 객체가 함수의 매개 변수로 전달되는 경우

    • 객체의 원본이 아니라 새로운 객체로 복사되어 진행된다.
    void swapObjects(Car c1, Car c2) {
        Car tmp;
        tmp = c1;
        c1 = c2; 
        c2 = tmp;
    }
    int main() {
        Car red(0, 1, "red");
        Car blue(30, 2, "blue");
        swapObjects(red, blue);
        red.print();
        blue.print();
        return 0;
    }
    
  • 함수가 객체를 반환하는 경우

    • 원본이 전달x, 내용이 복사된다.
  • 객채의 포인터가 매개 변수로 전달되는 경우

    void swapObjects(Car *p1, Car *p2)
    {
        Car tmp;
        tmp = *p1;
        *p1 = *p2;
        *p2 = tmp;
    }
    int main()
    {
        Car red(0, 1, "red");
        Car blue(0, 1, "blue");
        swapObjects(&red, &blue);
        red.print();
        blue.print();
        return 0;
    }
    
  • 객체의 참조자가 매개 변수로 전달되는 경우

    void swapObjects(Car &r1, Car &r2)
    {
        Car tmp;
        tmp = r1;
        r1 = r2;
        r2 = tmp;
    }
    int main()
    {
        Car red(0, 1, "red");
        Car blue(30, 2, "blue");
        swapObjects(red, blue);
        red.print();
        blue.print();
        return 0;
    }