【发布时间】:2017-04-26 01:40:38
【问题描述】:
我试图在 Base 类中编写一个纯虚函数,并且我给它一个主体接近定义,如下面的代码所示,因为我知道我应该得到一个编译错误,但是一切正常。它是 C++17 附带的新东西吗? (我用的是 Visual Studio 2017)
class Base {
public:
virtual void virtual_func() { std::cout << "This a virtual function from BASE" << std::endl; };
virtual void pure_func() = 0 { std::cout << "This a PURE virtual function from BASE" << std::endl; };
};
谢谢
【问题讨论】:
-
“我知道我应该得到一个编译错误” - 为什么?实现纯虚函数是完全合法的。
-
标准不允许这样做,但 VS(或更准确地说,微软的编译器)允许。要符合要求,您需要将定义与声明分开。
-
@Neil Butterworth 我不这么认为。它无法在 C++14 下编译。 ideone.com/EISKsp
-
@NeilButterworth;实现它们是完全合法的,但定义必须分开。
-
标准规定 - 在类中声明的虚函数应在该类中定义或声明为纯函数,或两者兼而有之。从此?实际上与 C++17 无关。
标签: c++ oop polymorphism