当派生 class 中的函数无法覆盖基 class 中的虚函数时发出警告
Warning when a function in a derived class fails to override a virtual function in a base class
考虑以下小程序:
#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
”,因为函数名称中的拼写错误在派生中。
现在在 java 或 C# 中,如果您在函数上放置 @override
标记,编译器会发出有关错字的警告。有什么办法可以用 gcc 做类似的事情吗?也许是魔法 __attribute__
之类的?
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 {
考虑以下小程序:
#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
”,因为函数名称中的拼写错误在派生中。
现在在 java 或 C# 中,如果您在函数上放置 @override
标记,编译器会发出有关错字的警告。有什么办法可以用 gcc 做类似的事情吗?也许是魔法 __attribute__
之类的?
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 {