C ++ доступ к закрытому члену в составе двух классов из базового класса

Так как я новичок в C ++, вот оно!

У меня есть базовый класс (я нигде не использую наследование) с двумя объектами из двух других классов. Мне нужно иметь доступ от частного члена к другому в другом классе.

class base
{
private:
myClass1 m1;
myClass2 m2;
public:
base() {};
~base() {};
};

class myClass1
{
private:
int m_member1;
public:
myClass1() {};

~myClass1() {};
};

class myClass2
{
private:
int m_member2;
public:
myClass2() {};

~myClass2() {};

int sum_members_because_yes(void)
{
return (myClass1::m_member1 + m_member2); //HOW CAN I DO THIS???
}
};

Как я могу получить доступ к m_member1 из myClass1 в myClass2? 🙂

(Я хочу избежать наследования, потому что в моем коде myClass1 и 2 не являются базовым классом …)

Спасибо

0

Решение

Есть много способов сделать это.

Чтобы разрешить доступ к m_member1 вообще, вы могли бы сделать m_member1 общественности. Или вы могли бы объявить что-то friend из myClass1, как это:

class myClass1
{
private:
int m_member1;
...
friend class base;
};

или это:

class myClass1
{
private:
int m_member1;
...
friend class myClass2;
};

или это:

class myClass1
{
private:
int m_member1;
...
friend class int myClass2::sum_members_because_yes(void);
};

Или вы могли бы дать myClass1 публичный аксессор:

class myClass1
{
...
public:
...
int get_m_member1() const
{
return(m_member_1);
}
};

Затем разрешить m2 достигать m1Вы могли бы дать m2 указатель на m1:

class myClass2
{
...
public:
myClass1 *pm1;
};

class base
{
...
public:
base()
{
m2.pm1 = &m1;
};
};

или вы могли бы передать значение m_member1 через базу по запросу m2, но этот ответ становится длинным.

(И как только вы освоитесь со всем этим, вы должны принять к сведению, что sum_members_because_yes действительно принадлежит base.)

1

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

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

#include <iostream>
using namespace std;

class B {
private:
int mMember;
public:
B(int aNumber) : mMember(aNumber) {}
~B() {}
int getNumber() { return mMember; }
};

class C {
private:
int mMember;
public:
C(int aNumber) : mMember(aNumber) {}
~C() {}
int getNumber() { return mMember; }
};

class A {
private:
B mB;
C mC;

public:
A(B b, C c) : mB(b), mC(c) {}
~A() {}
int sumMembers() {
return mB.getNumber() + mC.getNumber();
}
};

int main() {
B b(2);
C c(2);
A a(b, c);

cout << a.sumMembers() << endl; // prints 4

}

Здесь у нас есть два класса (B и C), которые содержат данные, а затем класс A, который имеет член типа B и C. Функция, которая возвращает сумму, должна быть методом класса A, потому что она содержит экземпляры B и C. доступ к данным классов данных осуществляется через геттер, это позволяет получить доступ к номеру, но не позволяет изменять его значение. В моем примере классы B и C одинаковы. Если два объекта являются двумя экземплярами одной и той же «вещи», то это должны быть два экземпляра одного и того же класса, а не разных классов. Я надеюсь, что ответил на правильный вопрос.

1

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