由于我是 C++ 的新手,所以开始吧!
我有一个基类(我没有在任何地方使用继承)和来自其他两个类的两个对象。我需要从私有(private)成员访问另一个类中的其他成员。
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 不是基类...)
谢谢
最佳答案
有很多方法可以做到这一点。
要完全允许访问 m_member1
,您可以将 m_member1
公开。或者你可以声明一些东西是 myClass1
的 friend
,像这样:
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
一个公共(public)访问器:
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;
};
};
或者您可以根据 m2
的请求通过 base 中继 m_member1
的值,但是这个答案越来越长。
(一旦您对所有这些感到满意,您应该注意 sum_members_because_yes
确实属于 base
。)
关于C++从基类访问两个类的组合中的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230928/