0

我有一个类,其中包含来自不同头文件的方法,如下所示:

#include "ICash.h"
#include "ILock.h"

class control: public ICash, public ILock
{
  public:
      control();

  private:
     void doSomething(int value);

};

所以现在当我通过控制类创建一个 ICash 实例时。在 control.cpp 中声明了方法。

是否可以通过 ICash 接口从控制中使用方法 doSomething?

谢谢。

4

2 回答 2

2

例如control.cpp,您可以拥有以下实现代码:

control::control() { /* ctor body */ }

void control::doSomething(int value)
{
    // your code here
}

然后,在某个地方,您可以control通过指向ICash

ICash *cash = new control;

If doSomethingwas not private,您可以void doSomething(int)从此指针中使用,cash例如cash->doSomething(5)only ifICash还有一个声明(虚拟或非虚拟) for void doSomething(int)

所以简而言之,为了能够doSomething在 a中使用ICash,它也必须在其中声明ICash

请注意,当doSomething在 in 中声明ICash并且您在(覆盖)中重新定义方法时,control您希望 in 中的声明ICashvirtual.

于 2013-10-22T12:24:38.220 回答
0

我猜这些方法是在它们相应的头类中声明的,但是如果你想让它们做一些有用的事情,你必须在你自己的类中重新定义它们。

您的控件类中的 doSomething 是私有方法,因此在其类之外根本不可用。但是你从 ICash 和 ILock 接口重新定义一个或多个方法,你可以从这些方法中调用 doSomething,例如:假设一个接口有一个方法 methodXXX:

class ISomething {
  public:
    virtual void callMe(int value);
}

class control: public ISomething {
  public:
    control();
    void callMe(int value) {
      return doSomething(value);
    }

  private:
    void doSomething(int value);
}

void control::doSomething(int value) {
  // do something :)
}

// somewhere later:
ISomething* something = new control();
something.callMe(5);//calls control.doSomething(5) internally
于 2013-10-22T12:25:48.940 回答