2015-09-03 3 views
1

рассмотрит следующую небольшую программу:Предупреждения, когда функция в производном классе не может переопределить виртуальную функцию базового класса

#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__ или некоторые такие?

+0

http://en.cppreference.com/w/cpp/language/override – Pradhan

ответ

0

С ++ 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 { 
Смежные вопросы