본문 바로가기

[C++]접근제어

반응형

<간단 복습>

   

객체 생성시 생성자 호출

class AA{ 생성자}

   

소멸자 - 객체가 있는 함수가 끝날 때 소멸자 호출(매개변수가 없다.)

~AA

   

<접근 제어>

   

클래스에서 말하는 접근 제어는 어떤 멤버를 외부에 보이게 할 것인지 지정하는 작업을

말한다.

   

   

class 기준

  • public - 외부에서 접근을 허용한다.
  • protected - 외부에서 접근할 수 없다.
  • private - 외부에서 접근할 수 없다.

       

    class{

    public

       

    protected

       

    private

    }

       

    private에 접근하려면 public를 통해서 접근 가능하다.

       

       

       

    예제>

       

    #include <iostream>

       

    using namespace std;

       

    class AccessControl

    {

    public:  

      char publicData;

      void publicFunc()   {}

       

    protected:

      int protectedData;

      void protectedFunc()  {}

       

    private:

      float privateData;

      void privateFunc()    {}

    };

       

    int main()

    {

       

      AccessControl ac;

        

      ac.publicData = 'A';

      ac.publicFunc();

      ac.ProtectedData = 100;

      ac.protectedFunc();

      ac.privateData = 4.5f;

      ac.privateFunc();

       

      return 0;

       

    }

       

       

       

       

    private 와 protected는 외부에서 접근할 수 없는데 접근하려고 해서 에러가 발생했다.

    public만 사용하면 에러가 발생하지 않는다.

       

    생성자와 소멸자도 접근 권한을 지정할 수 있는데, public로 하는 것이 일반적이다.

    만약에 클래스를 생성하면서 생성자를 private라고 설정해 놓으면 main() 함수에서는 방금만든 객체를 생성할 수 없다. 이제 대충 감이 오는군~

       

       

       

       

       

    클래스에서 모든 멤버 변수는 protected 혹은 private로 설정하는 것이 좋다.

       

    구조체와 클래스가 하는 일은 거의 똑같다고 볼 수 있는데 구조체는 기본설정이 public이고 클래스는 기본설정이 private

       

    접근자

       

    접근자는 단순히 public접근 권한을 가진 멤버 함수로 외부에서 멤버 변수에 접근는 것을

    도와주는 혹은 감시하는 역할을 한다.

    public에 있는 접근자라는 함수를 통해서 private에 접근한다.

       

       

    #include <iostream>

       

    using namespace std;

       

    class Point 

    {

    public:

       

      void Print();  //맴버함수

       

      Point();  //생성자들

      Point(int initialX, int initialY);

      Point (const Point& pt);

       

      void SetX(int value) { x= value;} //접근자

      void SetY(int value) { y= value;}

      int GetX() {return x;};

      int GetY() {return y;};

       

    private:

      int x, y; //맴버변수

       

    };

       

    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";

    }

       

    int main()

    {

      Point pt;

       

      pt.SetX(100);  //접근자를 사용해서 맴버변수의 값을 바꾼다.

      pt.SetY(100);

       

      cout <<"pt.x = " << pt.GetX() << "\n";  //접근자를 사용해서 

      cout <<"pt.y = " << pt.GetY() << "\n";  //맴버변수의 값을 바꾼다.

       

      return 0;

    }

       

       

       

       

       

       

       

    접근자만을 통해서 값을 바꾸는게 프로그램 관리상 안전하다. 값변경을 하는 경로를 하나만 해서 그것만 수정하기.

       

       

       

       

반응형

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

[C++]더블포인트, 과제4 풀이 및 클래스의 정의  (0) 2010.06.19
[C++]정적멤버  (0) 2010.06.18
문자 비트변환 후 켜진비트셈, 소수판별,로또번호  (0) 2010.06.16
  (0) 2010.06.16
소멸자  (0) 2010.06.16
-->