0

如果我有,我对如何覆盖函数感到困惑

class  C
{
  public:
    C ();
};


class A: public C
{
  public:
    virtual string write()=0;
};

我又上了一节课

class B: public A
{
    public:
       string B :: write() override {}
};

这对 B 类继承 A 类虚方法并覆盖它无效吗?

好的,所以在main中,我不允许调用这个抽象类的构造函数对吗?但是,如果该抽象类具有它继承的构造函数,我该如何调用它们?

void main()
{
   B();
}
4

3 回答 3

0

这对 B 类继承 A 类虚方法并覆盖它无效吗?

您需要删除多余的(和非法的)B::并返回一些东西。否则没关系。

我不允许调用这个抽象类的构造函数对吗?但是,如果该抽象类具有它继承的构造函数,我该如何调用它们?

你根本不能直接调用构造函数;这不是语言的工作方式。创建对象时会间接调用构造函数:

B b;  // Create an instance of B, indirectly calling B::B(), which calls A::A()

由于A是抽象的,因此您无法创建该类型的对象;只有派生类型,如B覆盖所有纯虚函数。

于 2013-10-31T07:02:31.483 回答
0

从另一个类继承的语法应该是这样的:

class B: public A{
   public:
      virtual string write(){
        //do something
        return someString;
      }
};
于 2013-10-31T04:44:08.950 回答
0

如果你想在这里指定override(在C++11中可用),你可以这样做。

头文件

class B : public A {
 public:
  virtual string Write() override;
}

文件

string B::Write() {
// Your implementation here.
}

事实上,指定override何时是您的实际意图是一种很好的做法。它避免了尝试用 覆盖等错误string A::Write()string B::Write() const但得到了定义第二个函数的结果。在这种情况下,如果您指定string B::Write() const override,它将是一个编译错误。

于 2013-10-31T04:55:45.837 回答