[英]Access the method of another class in C++
这是声明:
class a{
public:
void print_fib(int x){
printf("%d\n",b::getfib(x));
};
};
class b{
public:
void init(); //calculate the Fibonacci numbers, save them in `fib[]`
int getfib(int x);
private:
int fib[10];
};
class c{
private:
a ca;
b cb;
};
如何访问cb.getfib()
从ca.print_fib()
重新排序,否则向前声明
class b{
public:
bb();
};
class a{
public:
aa(b& inst);
};
class c{
private:
a ca;
b cb;
public:
void foo()
{
ca.aa(cb);
}
};
// implement here
void a::aa(b& inst)
{
// do stuff
b.bb(); // voila
}
更好的设计决策可能是在c::foo()
执行b::bb()
并将结果传递给a::aa()
..然后它们可以是独立的...
如果所有三个类都在同一文件中,则您的代码应该可以正常工作。
但是,如果您有单独的头文件,请将这些头文件包含在包含class C
文件中。
比我的回答更喜欢埃德·赫尔的评论。
如果你通过this
以CA和CB,你可以用它来访问CB分别CA。
class a {
public:
a(c *parent) : _parent(parent) {}
aa() { parent->cb.bb(); }
private:
c *_parent;
};
class c {
public:
c() : ca(this), cb(this) {}
...
我现在在代码中看到的主要问题是从a::print_fib
调用b::getfib(x)
,这不是进行此调用的正确方法。
b中的功能不是静态的,除非“ cache”也设为静态,否则不能为静态。 因此,要调用它,您需要b的实例(在c中具有)。 您可以在a中将其传递给函数,但实际上在这种情况下,我看不到为什么需要多个b实例。
还要注意,在您的代码中,尚未在a的标头中声明b。 您的代码必须重新排列以确保正确处理依赖关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.