Наследование и дружба в C++

Опубликовано: 15 Сентября, 2022

Наследование в C++: это концепция OOPS. Он позволяет создавать классы, производные от других классов, так что они автоматически включают в себя некоторые функции своего базового класса и некоторые собственные функции. (См. эту статью для справки)

Дружба в C++: Обычно к закрытым и защищенным членам класса нельзя получить доступ извне того же класса, в котором они объявлены. Однако класс друга имеет доступ к защищенным и закрытым членам первого класса. Классы, которые являются «друзьями», могут получить доступ не только к общедоступным членам, но и к закрытым и защищенным членам. (См. эту статью для справки)

Разница между наследованием и дружбой в C++: в C++ дружба не наследуется. Если базовый класс имеет дружественную функцию, то эта функция не становится дружественной для производного класса (классов).

Например, следующая программа выводит ошибку, потому что функция show() который является другом базового класса A , пытается получить доступ к закрытым данным производного класса B.

C++




// CPP Program to demonstrate the relation between
// Inheritance and Friendship
#include <iostream>
using namespace std;
  
// Parent Class
class A {
protected:
    int x;
  
public:
    A() { x = 0; }
    friend void show();
};
  
// Child Class
class B : public A {
private:
    int y;
  
public:
    B() { y = 0; }
};
  
void show()
{
    B b;
    cout << "The default value of A::x = " << b.x;
  
    // Can"t access private member declared in class "B"
    cout << "The default value of B::y = " << b.y;
}
  
int main()
{
    show();
    getchar();
    return 0;
}

Выход

prog.cpp: In function ‘void show()’:
prog.cpp:19:9: error: ‘int B::y’ is private
    int y;
        ^
prog.cpp:31:49: error: within this context
    cout << "The default value of B::y = " << b.y;
                                                ^

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

C++