访问实现类中的类的方法

时间:2013-08-12 14:34:19

标签: c++ oop inheritance

我有一节课,假设a.cpp。在这个类的私有属性中,我有一个指向b.cppc.cpp的指针,其中b.cpp是虚拟接口类的实现,让我们调用d.cpp。此外,在c.cpp的私有属性中,我有一个指向接口类d.cpp的指针。

我想在a.cpp类中访问类b.cpp中的一个方法。我怎么能这样做?

这个例子可以 好的,让我在课程中给出一些方法

class A{
private:
  B *_classB;
  C *_classC;
public:
  int add(int, int);
}

现在,接口类是D. 所以,在D级,我们有

class D{
public:
  virtual int mul(int, int) = 0;
}

现在,B类是接口类D的实现 所以,B看起来像:

class B{
private:
   int first_num;
   int second_num;

public:
   virtual int mul(int a, int b);
}

和C类也有指向接口类的指针,因此C看起来像

class C{
private:
  D *_classD;
}

现在,我想在类B中调用方法int add(int,int)。

3 个答案:

答案 0 :(得分:1)

因为A包含B并且没有其他关系,所以你需要在B类中保留一个指向所有者A的指针

答案 1 :(得分:1)

您需要一个类A的实例,或者您需要使add成为A的静态成员函数。

换句话说,static解决方案将是这样的:

class A
{
 ...
 static int add(int, int);
};

然后看电话:

...
A::add(x, y);
...

或者:

class B{
private:
   int first_num;
   int second_num;

public:
   virtual int mul(int a, int b);
   int add(const A& a, int x, int y)
   {
        return a.add(x, y);
   }
}

从A中的函数看,它看起来像这样:

void A::func(int x, int y)
{
     b->add(*this, x, y);
}

还有其他一些解决方案。但是如果没有关于你的实际用例是什么的更多信息,这可能会和它一样好。

答案 2 :(得分:0)

您可以将A类型的对象设为B的数据成员,也可以将A的指针设为B的数据成员。因为在您创建的类中,A和B之间没有关系。 除非你想做继承,我认为这不是问题。