[모던C++입문] 2.2 멤버

    2. 클래스

    2.2 멤버

    멤버 변수

    class complex
    {
    public:
        double r, i;
    }
    
    complex z, c;
    z.r = 3.5; z.i = 2;
    c.r = 2; c.i = -3.5;
    
    //멤버 변수는 도트 연산자 . 를 사용하여 접근 할 수 있다
    std::cout << " z is (" << z.r << ", " << z.i << ")" << enld;

    접근성

    • c++에서는 다음 3가지 접근 지정자(Access Modifier)를 제공한다
      • public: 어디에서나 접근 가능
      • protected: 클래스 내부와 파생 클래스에서 접근 가능
      • private: 클래스 내부에서만 접근 가능
    class A
    {
        //접근 지정자를 지정하지 않으면 기본 private 으로 된다
        int x;
        int y;
    
    public:
        int i, j;   //public
    
        //friend 선언은 클래스의 모든 접근 지정자에서 가능하다
        //A_2클래스에서 A클래스의 private와 protected 멤버에 접근할 수 있다.
        friend class A_2;
    }
    
    struct B
    {
        //struct는 기본 public으로 된다
        int x;
        int y;
    }

    접근 연산자

    complex c;
    complex* p = &c;
    *p.r = 3.5;         //오류 : *(p.r)을 의미
    (*p).r = 3.5;       //정상
    
    (*(*p).pm).m2 = 11;     //아름답지 않다
    p->pm->m2 = 11;         //위와 동일 하지만 한결 편안

    클래스에 대한 static 선언

    • static으로 선언된 멤버 변수는 클래스마다 하나만 존재
    • static을 사용하여 개체간의 리소스를 공유 가능
    • 다른 방식으로는 싱글턴(singleton)이라는 디자인 패턴이 있다
    • static 함수는 static 데이터에만 접근 가능하며 static 함수만 호출할 수 있다

    멤버 함수

    • 클래스의 함수는 멤버함수(Member Function) 또는 메서드(Method)라 한다
    • 일반적인 멤버 함수는 게터(getter)와 세터(setter)이다.
    class complex
    {
    public:
        double get_r() { return r; }
        void set_r(double newr) { r = newr; }
        double get_i() { return i; }
        void set_i(double newi) { i = newi; }
    private:
        double r, i;
    }
    
    int main()
    {
        complex c1, c2;
    
        //c1을 설정
        c1.set_r(3.0);
        c1.set_i(2.0);
        //c1을 c2에 복사
        c2.set_r(c1.get_r());
        c2.set_i(c1.get_i());
    
        //위 방식 보다 앞으로 배울 생성자를 통해 개체의 값을 설정하자
        return 0;
    }
    반응형

    댓글

    Designed by JB FACTORY