为什么较新版本的C ++不允许在类声明中定义纯方法?

时间:2017-09-23 21:06:01

标签: c++ oop chain

为什么MSVC ++ 2015及其早期版本允许在类声明中定义pure virtual method但在GCC 4.9上,我猜MSVC++ 2017不允许:

    #include <iostream>     

    class A{
        public:
            virtual void Foo() = 0;
    };

    class B: public A {
        public:
            virtual void Foo() = 0 { std::cout << "B::Foo()" << std::endl;
            }; // Allowed on MSVC 2015 and old versions

            //virtual void Foo() = 0; // on newer versions
    };

    //void B::Foo(){
    //  std::cout << "B::Foo()" << std::endl;
    //}     // Ok here!

    class C : public B{
        public:
            void Foo(){
                B::Foo();
                std::cout << "C::Foo()" << std::endl;
            }
    };

    int main(){

    //  A aObj; // error
    //  B bObj; // error
        C cObj; // correct
        cObj.Foo();

        std::cout << std::endl;
        std::cin.get();
        return 0;
    }

1 个答案:

答案 0 :(得分:7)

standard明确提到不允许这样做(例如C ++ 14,§10.4。/ 2)

  

函数声明不能​​同时提供pure-specifier和a   定义 - 结束注释] [示例:struct C {virtual void f()= 0 {   }; //格式错误}; - 结束例子]