ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • friend 키워드의 의미?
    @ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:49

    private 건 protected건 friend로 선언된 대상에게는 완벽하게 public으로 작용한다. 대상이 외부이건 상속관계도있건 그런것은 중요치 않다.

    friend 키워드는 당하는 쪽에서 선언하게 되어 있다.


    1. 명시적으로 지정한 대상만 friend만 된다.

    2. firend지정은 전이되지 않으며, friend의 friend 관게는 인정하지 않는다. 

    3. 복수의 대상에 대해 동시에 friend를 지정할 수 있지만, 한번에 하나씩만 가능하다.

    4. friend 관계는 상속되지 않는다.


    1번 : 키워드를 선언한 객체에 대해서 선언 받은 대상은 얼마든지 접근할 수 있지만, 반대로는 전혀 접근할 수 없다.

    (물론 서로 키워드를 남발하면 가능함)

    2번, 4번 : A가 B를 friend로 선언했어도 B의 friend인 C가 A를 건드릴 순 없다. 이는 상속관계에서도 마찬가지이다.



    ** friend멤버 함수도 있는데 이건 클래스 전체가 아니라 특정 멤버함수만을 대상으로 할때 한다.


    마지막 활용법은 좀 봐야할듯..전역변수 처럼..

    http://genesis8.tistory.com/98



    멤버함수는 프로토타입 선언 후 클래스 밖에서 클래스명::멤버함수명()으로 사용하였다.

    1) 프렌드 함수는 일반함수이다.

    2) 클래스내에 프렌드 함수의 원형을 선언하고 외부에 정의한다.

    3) 프렌드 함수의 매개변수는 반드시 클래스의 객체변수이다.

    4) 프렌드 함수를 멤버 함수처럼 사용하여 클래스의 멤버 변수에 접근할 수 있다.


    <형식프렌트 함수 사용

    class 클래스명{

    [private :]

    데이터형 멤버변수명1;

    데이터형 멤버변수명2;

    public :

    리턴데이터형 멤버함수명1(매개변수)

    {

    문장;

    }

    friend 리턴데이터형 함수명1(클래스명 객체변수);

    // friend 프로토타입 선언

    };

    리턴데이터형 함수명1(클래스명 객체변수)

    {

    문장;

    }

     

    <예제1> 프렌드 함수 사용

    #include<iostream>

    using namespace std;

    class student{

    int a, b;

    public :

    void aaa(int x, int y)

    {

    a = x;

    b = y;

    }

    friend int bbb(student aa);

    };

    int bbb(student aa)

    {

    int k;

    k = aa.a*5 + aa.b*5;

    return k;

    }

    void main(){

    student st; //객체 생성

    int result;

    st.aaa(100, 200);

    result = bbb(st);

    cout <<"프렌트 함수 결과 : "<<result<<endl;



    /* 여러 클래스의 프렌드 함수

    특정 함수가 여러 클래스의 프렌드 함수로 사용된다 */

    #include <iostream>

    using namespace std;

    class mbc;

    class kbs

    {

    int salary, hours;

    public :

    void s_value(int a, int b)

    {

    salary = a;

    hours = b;

    }

    friend int work_time(mbc mm, kbs kk);

    };



    class mbc{

    int bonus, hours;

    public :

    void s_value(int m, int n)

    {

    bonus = m;

    hours = n;

    }

    friend int work_time(mbc mm, kbs kk);

    };

    int work_time(mbc mm, kbs kk)

    {

    int result;

    result = mm.hours - kk.hours;

    return result;

    }


    void main()

    {

    mbc mc;

    kbs ks;

    int result;

    mc.s_value(3000,30);

    ks.s_value(500,20);

    result = work_time(mc,ks);

    if(result > 0)

    cout <<"MBC가 일을 더 많이 합니다"<<endl;

    else 

    cout <<"KBS가 일을 더 많이 합니다"<<endl;

    }

Designed by Tistory.