Так как я новичок в 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 не являются базовым классом …)
Спасибо
Есть много способов сделать это.
Чтобы разрешить доступ к 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
.)
Мне не очень понятно, чего вы хотите достичь. Я думаю, что нужно иметь два класса, содержащих данные внутри другого класса, и иметь функцию, которая возвращает некоторую комбинацию данных двух классов. Я бы сделал это следующим образом:
#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 одинаковы. Если два объекта являются двумя экземплярами одной и той же «вещи», то это должны быть два экземпляра одного и того же класса, а не разных классов. Я надеюсь, что ответил на правильный вопрос.