Можно ли в классе С выполнить расчет int a / int b
и записать результат в переменную класса С int c
?
class A {
int a = 5;
};
class B {
int b = 10;
};
class C {
friend class A;
friend class B;
int c;
};
Если вас интересует тот вопрос, может ли дружественный класс использовать закрытые имена классов, чьим другом он является, то да - например так:
#include <iostream>
using std::cout;
class C; // вначале обьявите
class A {
friend class C;
int a;
public:
A() : a(10) { } // в конструкторе инициализировать, а не так как вы сделали
};
class B {
friend class C;
int b;
public:
B() : b(5) {}
};
class C {
int c; // с это не C, поэтому можно
public:
C() { A t; B k; c = t.a/k.b;} // нужно создавать обьекты типов
int get_res() const { return c; }
};
int main()
{
C g;
std::cout << g.get_res();
return 0;
}
Понимаете, если я скажу, что вы мой друг - вы же меня от моего заявления не пустите к себе переночевать?
А вот я вроде как должен, раз заявил, что вы мой друг...
Вот так и у вас - класс C
заявил, что он - друг A
и B
, так что он им доверяет свои внутренности :) А они ему такое доверие не высказали.
Согласитесь, было бы слишком небезопасно - так любой класс, любая функция могли бы получить доступ к любым запрятанным полям - просто объявив о своем желании...
В вашем примере нет никакого a
и нет никакого b
.
В вашем примере есть только нестатические поля классов A::a
и B::b
. Нестатические поля классов не существуют физически сами по себе. Нестатические поля классов существуют только внутри объектов (экземпляров) этих классов, только вместе с этими объектами. Поэтому, пока вы не создадите объекты этих классов, никаких a
и b
не будет.
Если у вас на руках есть экземпляр aa
класса A
и экземпляр bb
класса B
, то вы, при наличии соответствующих прав доступа, сможете запросто вычислить значение aa.a / bb.b
. Но пока у вас нет таких экземпляров, то и говорить не о чем, ибо никаких a
и b
не существует.
У вас в коде я не вижу ни малейшего намека то, что класс C
работает с какими-то экземплярами классов A
и B
. А без экземпляров ни о каких a
и b
и говорить не приходится.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Проблема была описанна выше) Смысл программы, что бы находить самое длинное слово 1 строки, которое должно содержаться в 2 других строкахВсе...