Рубрики

Друг класс и функция в C ++

Класс друзей Класс друзей может получить доступ к закрытым и защищенным членам другого класса, в котором он объявлен как друг. Иногда полезно разрешить определенному классу доступ к закрытым членам другого класса. Например, классу LinkedList может быть разрешен доступ к закрытым членам Node.

class Node {

private:

    int key;

    Node* next;

    / * Другие члены Node Class * /

  

    // Теперь класс LinkedList может

    // доступ к закрытым членам Node

    friend class LinkedList;

};

Функция друга Как и класс друга, функции друга может быть предоставлен специальный грант для доступа к закрытым и защищенным членам. Функция друга может быть:
а) метод другого класса
б) глобальная функция

class Node {

private:

    int key;

    Node* next;

  

    / * Другие члены Node Class * /

    friend int LinkedList::search();

    // только search () of relatedList

    // может получить доступ к внутренним членам

};

Ниже приведены некоторые важные моменты о функциях и классах друзей:
1) Друзья должны использоваться только для ограниченных целей. слишком много функций или внешних классов объявляются как друзья класса с защищенными или частными данными, это уменьшает ценность инкапсуляции отдельных классов в объектно-ориентированном программировании.

2) Дружба не является взаимной. Если класс A является другом B, то B не становится другом A автоматически.

3) Дружба не наследуется (см. Это для более подробной информации)

4) Понятие друзей отсутствует в Java.

Простая и полная программа C ++, чтобы продемонстрировать другу класс

#include <iostream>

class A {

private:

    int a;

  

public:

    A() { a = 0; }

    friend class B; // Friend Class

};

  

class B {

private:

    int b;

  

public:

    void showA(A& x)

    {

        // Так как B является другом A, он может получить доступ

        // частные члены А

        std::cout << "A::a=" << x.a;

    }

};

  

int main()

{

    A a;

    B b;

    b.showA(a);

    return 0;

}

Выход:

A::a=0

Простая и полная программа C ++ для демонстрации функции друга другого класса

#include <iostream>

  

class B;

  

class A {

public:

    void showB(B&);

};

  

class B {

private:

    int b;

  

public:

    B() { b = 0; }

    friend void A::showB(B& x); // Функция друга

};

  

void A::showB(B& x)

{

    // Так как showB () является другом B, он может

    // доступ к закрытым членам B

    std::cout << "B::b = " << x.b;

}

  

int main()

{

    A a;

    B x;

    a.showB(x);

    return 0;

}

Выход:

B::b = 0

Простая и полная программа C ++, чтобы продемонстрировать глобальный друг

#include <iostream>

  

class A {

    int a;

  

public:

    A() { a = 0; }

  

    // глобальная функция друга

    friend void showA(A&);

};

  

void showA(A& x)

{

    // Так как showA () является другом, он может получить доступ

    // частные члены А

    std::cout << "A::a=" << x.a;

}

  

int main()

{

    A a;

    showA(a);

    return 0;

}

Выход:

A::a = 0

Ссылки:
http://en.wikipedia.org/wiki/Friend_class
http://en.wikipedia.org/wiki/Friend_function
http://www.cprogramming.com/tutorial/friends.html
http://www.parashift.com/c++-faq/friends-and-encap.html

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Друг класс и функция в C ++

0.00 (0%) 0 votes