在C ++中访问另一个类的方法

时间:2012-01-11 10:58:44

标签: c++ class syntax

这是宣言:

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()

4 个答案:

答案 0 :(得分:1)

重新订购,否则转发声明

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
}

更好的设计决策可能是在b::bb()中执行c::foo()并将结果传递给a::aa() ..然后它们可以是独立的......

答案 1 :(得分:0)

如果所有三个类都在同一个文件中,那么你的代码应该可以正常工作。

但是,如果您有单独的头文件,请将这些头文件包含在包含class C的文件中。

更喜欢Ed Heal对我的回答的评论。

答案 2 :(得分:0)

如果您将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) {}

    ...

答案 3 :(得分:0)

我现在在代码中看到的主要问题是从b::getfib(x)调用a::print_fib,这不是进行此调用的正确方法。

b中的函数不是静态的,除非“缓存”也是静态的,否则不能是静态的。因此,要调用它,您需要一个b的实例(您在c中有)。你可以把它传递给你的函数,但实际上在这种情况下我不明白为什么你需要b的多个实例。

另请注意,从您的代码中,b尚未在a的标头中声明。您的代码必须重新排列,以确保正确处理依赖关系。