Друг производного класса может получить доступ к каким переменным?

Чтобы упростить мою проблему, у меня есть что-то вроде этого:

class Base {

private:

protected:
int a,b;
string c;

public:
[some functions here]

}

class Derived : public Base{

[some variables and functions]

friend void function();

}

void function(){

int d[a][b];
[stuff]

}

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

-1

Решение

Вы можете определить частные методы в Derived: любой метод в Derived может получить доступ к защищенным членам Base.

Функция является другом Derived, поэтому она может вызывать те частные методы в Derived, которые, в свою очередь, получают доступ к защищенным членам Base.


Изменить, чтобы ответить на комментарий ниже

get_a() метод члена и a данные-члены являются членами своих классов. Экземпляры этих членов существуют в экземплярах их классов. Они не существуют, кроме как внутри экземпляра, поэтому для доступа к ним вам нужен доступ к ним через экземпляр класса.

Например, что-то вроде этого:

class Derived : public Base{

[some variables and functions]

friend void function(Derived& derived);
};

void function(Derived& derived)
{
int a = derived.get_a();
int b = derived.get_b();
// I don't know but even the following might work
int c = derived.a; // able to access field of friend's base class.
}

void test()
{
Derived* derived = new Derived();
function(*derived);
delete derived;
}
0

Другие решения

Ваши функции должны получить доступ к a и b через экземпляр класса Derived следующим образом

void function()
{
Derived objectDerived;
int d[objectDerived.a][objectDerived.b];
[stuff]
}
0

По вопросам рекламы [email protected]