繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM