我在一个班级里有一个班级。
外部类进行一些处理以生成值数组。
我希望内部类能够访问外部类的数组。
有没有一种干净的方法来实现这一目标?
我正在考虑在外部类中有一个方法,该方法在内部类中调用一个方法,向他发送数组的地址,并且内部类需要在其私有成员部分中保留一个指针,以便以后指向通过从接收地址的方法进行赋值来实现。但这感觉有些笨拙。
答案 0 :(得分:1)
在构造时,您可以将外部类的引用传递给内部类的构造函数。使用引用,您可以调用外部类的任何函数。
// The actual definition of the inner class.
class inner {
public:
inner(outer& o) : outer_(o) // Set the reference.
{
}
// The function using the data in outer.
void do_stuff()
{
int x = outer_.get_data() + 5;
}
private:
// A reference to the outer class.
outer& outer_;
}
// The actual outer class.
class outer {
public:
outer() : inner_(*this) // Set the reference using the this object.
{
}
// This is the function you would like to call.
int get_data();
private:
inner inner_;
}
答案 1 :(得分:0)
C ++具有嵌套类的概念。嵌套类,在另一个封闭类中声明。它是成员,并且与封闭类的任何其他成员具有相同的访问权限。但是,封闭类的成员对嵌套类的成员没有特殊的访问权限。您可以参考此示例代码。希望这会有所帮助
class Outer {
private:
int arry[];
class inner {
private:
int innerArr[];
void Fun(Outer *e) {
innerArr = e->arry;
}
};
};
int main(){
Outer out;
Outer::inner in;
in.Fun(out);
}
答案 2 :(得分:0)
好的,这里已满。重点:
因此知道,这是一个具体示例。
→Outer拥有Inners的向量。
→内部需要使用其拥有的外部实例
➥说外层可能是某种列表,内层可能是某种项目
class Outer
{
public: // can be private, in which case Inner won't be usable from outside
class Inner
{
Outer & m_outer;
public:
Inner(Outer & outer) : m_outer(outer) {}
void doOuterMagic() { m_outer.doMagic(); }
};
public:
void addInner() { m_inners.emplace_back(*this); }
private: // could be public, but I want to illustrate Inner access to private members
void doMagic() { std::cout <<"magic"; }
private:
std::vector<Inner> m_inners;
};
与任何类一样,如果可读性更好,也可以在外部类下定义它。您可以这样:
class Outer
{
public: // can be private, in which case Inner won't be usable from outside
class Inner;
public:
// ... unchanged ...
};
class Outer::Inner // note the scoping here
{
// ... exactly what was in class Inner above
};
注释:
addInner
中所做的那样,让Outer创建Inner实例并将其自身传递给它们是很常见的。m_outer
用作参考,但这阻止Inner
满足* Assignable要求。如果您需要类来满足这些要求,请改为使用指针。