覆盖类中的函数

时间:2013-10-31 04:41:45

标签: c++ class override

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

class  C
{
  public:
    C ();
};


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

我又做了另一节课

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

这对继承A类虚方法并重写它的B类无效吗?

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

void main()
{
   B();
}

3 个答案:

答案 0 :(得分:0)

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

class B: public A{
   public:
      virtual string write(){
        //do something
        return someString;
      }
};

答案 1 :(得分:0)

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

标头文件

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

CPP文件

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

事实上,如果这是您的实际意图,指定override是一个好习惯。它避免了错误,例如尝试用string A::Write()覆盖string B::Write() const,但得到定义第二个函数的结果。在这种情况下,如果指定string B::Write() const override,则会出现编译错误。

答案 2 :(得分:0)

  

这对继承A类虚方法并重写它的B类无效吗?

您需要删除冗余(和非法)B::并返回一些内容。否则没关系。

  

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

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

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

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