본문 바로가기

반드시 생성자가 있어야 하는 경우&생성자를 사용해 임시객체 만들기

반응형

P551 /21-9

   

   

class Needconstructor

{

public:

  const int maxCount;  //const 속성을 가진 멤버변수 선언

  int& ref;    //레퍼런스 타입의 멤버 변수 선언

  int sample;

   

};

   

int main()

{

   

  Needconstructor cr;

  cr.maxCount = 100;  //객체를 생성하자마자 바로 초기화

  cr.ref  =cr.sample;

    

  return 0;

}

   

   

   

화면 캡처: 2010-06-16, 오전 9:37

   

에러 발생.

   

   

   

   

class Needconstructor

{

public:

  const int maxCount;  //const 속성을 가진 멤버변수 선언

  int& ref;    //레퍼런스 타입의 멤버 변수 선언

  int sample;

   

  NeedConstructor();

   

};

   

NeedConstructor::NeedConstructor()

{

  maxCount = 100;    //디폴트 생성자를 추가하고 안에서

  num = sample;    //맴버변수를 초기화하게 만들었다.

}

   

   

int main()

{

   

  Needconstructor cr;

    

  return 0;

}

   

   

   

   

화면 캡처: 2010-06-16, 오전 9:43

   

<에러발생>

   

   

#include <iostream>

using namespace std;

   

class NeedConstructor

{

public:

  const int maxCount;  //const 속성을 가진 멤버변수 선언

  int& ref;    //레퍼런스 타입의 멤버 변수 선언

  int sample;

   

  NeedConstructor();

   

};

   

NeedConstructor::NeedConstructor():maxCount(100), ref(sample)

{

  sample = 200;    

    

}

   

   

int main()

{

   

  NeedConstructor cr;

   

  cout << "cr.maxCount =" << cr.maxCount << "\n";

  cout << "cr.ref =" << cr.ref << "\n";

    

  return 0;

}

   

   

   

   

   

화면 캡처: 2010-06-16, 오전 10:06

   

   

  • 반드시 초기화해야 하는 멤버 변수들은 생성자의 초기화 리스트를 사용해서 초기화 해야한다.

       

       

       

    #include <iostream>

    using namespace std;

       

    class NeedConstructor

    {

    public:

      const int maxCount;  //const 속성을 가진 멤버변수 선언

      int& ref;    //레퍼런스 타입의 멤버 변수 선언

      int sample;

       

      NeedConstructor();

      NeedConstructor(int count, int& number);

       

    };

       

    NeedConstructor::NeedConstructor(int count, int& number)

    : maxCount(count), ref(number)

    {

      sample = 200;

    }

       

       

    NeedConstructor::NeedConstructor():maxCount(100), ref(sample)

    {

      sample = 200;    

        

    }

       

       

    int main()

    {

      int number = 400;

       

      NeedConstructor cr(300, number);

       

      cout << "cr.maxCount =" << cr.maxCount << "\n";

      cout << "cr.ref =" << cr.ref << "\n";

        

      return 0;

    }

       

       

       

       

    화면 캡처: 2010-06-16, 오전 10:14

       

       

  • 생성자를 사용해서 임시객체 만들기.

       

    생성자의 주된 일은 맴버변수의 초기화이다.

    그리고 맨 처음 실행이 필요한 것은 생성자에 넣어주면 된다.

    객체마다 초기화하는 변수가 다를 수 있으므로 생성자를 사용해서 값을 초기화해 주는 것

    이다.

    객체를 만들 때 자동으로 생성자 호출한다.

       

       

       

    #include <iostream>

    using namespace std;

       

    class Point

    {

    public:

      int x,y;

       

      void Print();

      Point();

      Point(int initialX, int initialY);

      Point(const Point& pt);

    };

       

    Point::Point(const Point& pt)

    {

      x = pt.x;

      y = pt.y;

    }

       

    Point::Point(int initialX , int initialY)

    {

      x = initialX;

      y = initialY;

    }

       

    Point::Point()

    {

      x=0;

      y=0;

    }

       

    void Point::Print()

    {

      cout << "(" << x << "," << y << ")\n";

    }

       

    void Area( const Point& pt)

    {

      int area = pt.x * pt.y;

       

      cout << "(0,0) 이루는 사각형의 면적 = " << area << "\n";

       

    }

       

       

    int main()

    {

      int x= 5;

      int  y= 7;

       

      Point temp(x , y);

       

      Area (temp);

       

      return 0;

    }

       

       

       

       

    화면 캡처: 2010-06-16, 오전 10:30

       

       

       

       

       

       

       

반응형

'About 프로그래밍!!! > C++' 카테고리의 다른 글

  (0) 2010.06.16
소멸자  (0) 2010.06.16
문제풀이& 클래스,생성자 복습  (0) 2010.06.16
복사 생성자  (0) 2010.06.15
매겨변수가 있는 생성자  (0) 2010.06.15
-->