0

因为我是 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???
    }
};

如何从 myClass2 中的 myClass1 访问 m_member1?:)

(我想避免继承,因为在我的代码中 myClass1 和 2 不是基类......)

谢谢

4

2 回答 2

2

有很多方法可以做到这一点。

要完全允许访问m_member1,您可以m_member1公开。或者你可以声明一些 a friendof 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.)

于 2015-07-05T14:37:48.700 回答
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),然后是具有 B 和 C 类型成员的 A 类。返回总和的函数应该是 A 类的方法,因为它包含 B 和 C 的实例。私有数据类的数据通过 getter 访问,这允许访问数字但不能更改其值。在我的示例中,B 和 C 类是相同的。如果这两个对象是同一个“事物”的两个实例,那么它们应该是同一个类的两个实例,而不是不同的类。我希望我已经回答了正确的问题。

于 2015-07-05T14:21:54.347 回答