我和一个朋友进行了一次关于构造对象的非常有趣的讨论,最终得到了这段代码:
#include <iostream>
class Parent {
public:
Parent( ) {
this->doSomething( );
}
virtual void doSomething( ) = 0;
};
class Child : public Parent {
int param;
public:
Child( ) {
param = 1000;
}
virtual void doSomething( ) {
std::cout << "doSomething( " << param << " )" << std::endl;
}
};
int main( void ) {
Child c;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道标准没有定义从构造函数或析构函数调用纯虚函数时的行为,这也不是我如何在生产中编写代码的实际示例,它只是检查编译器执行什么的测试.
在Java打印中测试相同的构造
做某事(0)
这是有道理的,因为从父构造函数调用时param没有初始化doSomething().
我期望在C++中有类似的行为,其差异param在调用函数时包含任何内容.
相反,编译上面的代码会导致链接器错误,(c++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3) …