Почему код успешно компилируется?

72
20 декабря 2021, 03:40

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

#include <iostream>
using namespace std;
class hom {
private:
    int ppp = 2;
    friend void aat(hom& obj);
};
class hliw {
private:
    int zalu = 3;
    friend void aat(hom& obj);
};
class tov {
private:
    int za = 3;
    friend void aat(hom& obj);
};
hliw w;
hom q;
tov r;
void aat(hom& obj) {
    int result = q.ppp + w.zalu+r.za;
    cout << result;
}
int main() {
    aat(q);
}
Answer 1

Ваша функция объявлена как дружественная в трех классах, поэтому она может обращаться к закрытым полям всех трех классов, в которых вы объявили ее другом.

Что она и делает :)

Попробуйте удалить строку

friend void aat(hom& obj);

из одного из классов и посмотрите на результат - функция больше не сможет обратиться к закрытому полу этого класса.

И, кстати, код и не должен "крашиться", он должен перестать компилироваться.

READ ALSO
Открыть файл с++

Открыть файл с++

Как открыть файл с именем, заданым в отдельной строке без указания полного пути, только для чтения? В какой директории файл должен находиться?

112
Нужно посчитать сколько раз слово встречается в строке, но почему то выводит 0

Нужно посчитать сколько раз слово встречается в строке, но почему то выводит 0

Ввести строку и словоОпределить сколько раз слово встречается в строке

182
Не работает each в jquery

Не работает each в jquery

Нужно через перебор заходить на каждую страницу и нажимать кнопкуИ дождать когда кнопка будет нажата

69