Visual Studio 查找未覆盖的纯虚拟函数

Visual Studio find un-overriden pure virtual functions

本文关键字:虚拟 函数 覆盖 Studio 查找 Visual      更新时间:2023-10-16

我正在设计一个继承自几个接口的类,每个接口都有许多纯虚函数。我希望能够实例化我的类,所以我需要覆盖它继承的所有纯虚函数。我希望有一种方法来突出显示或显示我尚未在我的派生类中覆盖但尚未找到的函数。

我尝试生成一个类图来直观地比较派生类和基类中的函数。但是,我更喜欢更直接和优雅的解决方案,尤其是随着项目的发展。

下面是一个概括的示例:

福.h

class Foo {
public:
  virtual int foo1() = 0;
  virtual int foo2() = 0;
  virtual int foo3() = 0;
  virtual int foo4() = 0;
  //...
  virtual int foo90() = 0;
};

酒吧

class Bar : public Foo {
public:
  int foo1() override {
    return 4;
  }
  int foo2() override {
    //do stuff
  }
  //darn, I lost track of what I still need to implement!
};

Visual Studio是否有办法自动显示哪些功能仍未被覆盖?或者,如果有一个编译器选项来为每个阻止我的类实例化的抽象函数显示错误/警告,那么这将同样有用。

假设你有:

class Foo {
public:
    virtual int foo1() = 0;
    virtual int foo2() = 0;
    virtual int foo3() = 0;
    virtual int foo4() = 0;
};
class Bar : public Foo {
public:
    int foo1() override {
        return 4;
    }
    int foo2() override {
        //do stuff
    }
};

你实例化酒吧:

int main()
{
    Bar b;
}

Visual Studio 生成一个 C2259 编译错误,告知您无法实例化抽象类,并突出显示 foo3(( 和 foo4(( 是抽象的("由于以下成员"(:

1>C:UsersAmitsourcereposTestTestTest.cpp(115,9): error C2259: 'Bar': cannot instantiate abstract class
1>C:UsersAmitsourcereposTestTestTest.cpp(99): message : see declaration of 'Bar'
1>C:UsersAmitsourcereposTestTestTest.cpp(115,9): message : due to following members:
1>C:UsersAmitsourcereposTestTestTest.cpp(115,9): message : 'int Foo::foo3(void)': is abstract
1>C:UsersAmitsourcereposTestTestTest.cpp(95): message : see declaration of 'Foo::foo3'
1>C:UsersAmitsourcereposTestTestTest.cpp(115,9): message : 'int Foo::foo4(void)': is abstract
1>C:UsersAmitsourcereposTestTestTest.cpp(96): message : see declaration of 'Foo::foo4'
1>Done building project "Test.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========