【问题标题】:Warning when a function in a derived class fails to override a virtual function in a base class [duplicate]当派生类中的函数无法覆盖基类中的虚函数时发出警告[重复]
【发布时间】:2015-09-03 01:23:56
【问题描述】:

考虑以下小程序:

#include <iostream>

class Base {
public:
    virtual void MyFunction() const {
        std::cout << "This is Base" << std::endl;
    }
};

class Derived : public Base {
public:
    virtual void MyFuntcion() {
        std::cout << "This is Derived" << std::endl;
    }
};

int main() {
    Base *p = new Derived();
    p->MyFunction();
    return 0;
}

它可以用g++ -Wall -Wextra 干净地编译,编译器几乎看不到它,但是当你运行它时,它会打印“This is Base”,因为 Derived 中的函数名称有错字。

现在在 java 或 C# 中,如果您在函数上放置 @override 标记,您将收到编译器关于拼写错误的警告。有没有办法用 gcc 做类似的事情?也许是魔法__attribute__ 或类似的?

【问题讨论】:

标签: c++ gcc g++ compiler-warnings


【解决方案1】:

C++11 也引入了override

class Derived : public Base {
public:
    void MyFuntcion() override {
        std::cout << "This is Derived" << std::endl;
    }
};
test.cpp:12:10: error: 'void Derived::MyFuntcion()' marked 'override', but does not override
     void MyFuntcion() override {

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 2018-12-23
    • 2020-01-16
    • 2015-10-24
    • 1970-01-01
    • 2012-02-05
    • 2014-01-15
    • 2019-03-02
    • 2012-11-17
    相关资源
    最近更新 更多