-9

这是一个骨架代码:

class C{
  callMe(){}
};

class A{
  // How to use callMe()
};

class B : C {
  callMe();
  A a;
};

在此示例中,B 类扩展了 C 类,因此它可以调用 callMe() 方法。但是我需要在 A 类中使用 callMe() ,因为 A 类不能扩展 C 类。我想知道怎么做?

4

3 回答 3

2

您需要使 A 包含 C 类型的对象。

class A
{
 private:
   C objC;

 public:
   void WhateverMethod() { objC.CallMe(); }

};

此外,继承的语法是

class B : C{

};

如果您希望 B 简单地访问 CallMe(),那么您不需要在 B 中重新定义它。它将从 C 继承它。如果您希望 B 覆盖 CallMe,那么您需要这样做:

class C
{
  public:
    virtual void CallMe() { //definition }

};

class B : public C
{
 public:
   void CallMe() { //redefine it here }

};

请注意,我从您的语法错误中假设您是 JAVA 程序员。方法在 C++ 中不会自动标记为虚拟,如果要使用多态,则必须将它们标记为虚拟,并且必须从指针中使用它们才能使其工作。

于 2012-08-13T13:56:10.487 回答
1
class C{ 
  callMe(){} 
friend class A;
}; 


class A{

//use call me here

};
于 2012-08-13T13:57:39.670 回答
0

您需要提供以下实例C

class C {
public: // has to be public
  void callMe() const {}
};

class A{
public:
    A(const C& inst) : inst(inst) {}

    void foo() {
        inst.callMe();
    }
private:
    const C& inst;
};
于 2012-08-13T13:57:24.417 回答