2014-08-31 3 views
0

У меня есть два класса X и Y.Функция одного класса друга другого класса

Y имеет частный член mark, X имеет функцию getmark().
Я объявила getmark() как friend от Y.

Теперь, как получить доступ к частному члену mark из Y с помощью функции friend?

Это код, который я до сих пор

#include<iostream> 

using namespace std; 

class X 
{ 
    public: 
    int getmark(); 
}; 

class Y 
{ 
    int mark; 
    public: 
    friend int X::getmark(); 
}; 

int main() 
{ 

} 
+0

Downvoting не проблема. Но я был бы счастлив, если на мой вопрос будет дан ответ. – Pradeep

+0

В 'getmark()', сделайте что-то вроде 'Y y; y.mark = 42; ' – juanchopanza

+0

Если человек, который отклонил вопрос, может занять некоторое время, чтобы предоставить код, было бы очень полезно. – Pradeep

ответ

1
#include<iostream> 

using namespace std; 

class Y; //forward declaration of class Y 
class X 
{ 
    public: 
    int getmark(Y); 
}; 

class Y 
{ 
    int mark; 
    public: 
    friend int X::getmark(Y); 
}; 

int X::getmark(Y obj){ 
    cin>>obj.mark; 
} 

int main() 
{ 
    X a; 
    Y b; 
    a.getmark(b); 
} 

Во-первых, когда объект а (класс X), создан, опережающее объявление класса Y необходимо для того, чтобы объявить Y аргумент X::getmark() ,

Создание объекта b (класс Y) не будет проблемой, поскольку компилятор знает класс X (для функции друга).

Затем просто вызовите функцию getmark() через объект a.

Примечание: после объявления класса Y необходимо объявить функцию getmark(), иначе компилятор рассмотрит класс Y как неполный тип.

0

Просто функция, чтобы иметь возможность установить метку:

void Y::setMark(int n) 
{ 
    mark = n; 
} 

Убедитесь, чтобы добавить прототип функции в Y класса.

int X::getMark(Y &y) 
{ 
    return y.mark; 
} 


int main 
{ 
    X x; 
    Y y; 

    y.setMark(5); 

    cout << x.getMark(y) << endl; 
} 

Должен выдавать результат 5.

0
  1. Убедитесь, что реализация X::getmark() после определения class Y. В противном случае X::getmark() не выиграет от того, чтобы быть другом class Y.

  2. Доступ к частным лицам Y, по вашему усмешке, в X::getmark().

Код:

class X 
{ 
    public: 
    int getmark(); 
}; 

class Y 
{ 
    int mark; 
    public: 
    friend int X::getmark(); 
}; 

int X::getmark() 
{ 
    Y y; 
    y.mark = 100; 

    // Do whatever you need to do with y. 

    return 0; 
}