来自构造函数的 C++ 虚函数

标签 c++ oop class constructor virtual

为什么下面的示例会打印“0”以及必须更改什么才能按我的预期打印“1”?

#include <iostream>
struct base {
   virtual const int value() const {
      return 0;
   }
   base() {
      std::cout << value() << std::endl;
   }
   virtual ~base() {}
};

struct derived : public base {
   virtual const int value() const {
      return 1;
   }
};

int main(void) {
   derived example;
}

最佳答案

因为 base 是首先构建的,并且还没有“成熟”成 derived。当它不能保证对象已经正确初始化时,它不能调用对象上的方法。

关于来自构造函数的 C++ 虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/496440/

相关文章:

c++ - fatal error LNK1127 : library is corrupt --> after adding extern "C" to function prototype

oop - 存储库模式与简单数据访问层有何不同?

php - ZF2 - 如何使用 Hydrator/exchangeArray() 填充嵌套对象

C++ 将参数传递给类的实例

c++ - C++ 中的格式化输入

c++ - 赋值运算符和相等运算符中的宽字符和字符

c++ - 来自另一个类的 Qt C++ GUI 调用

.net - 在什么情况下不应处理异常?

java - Class对象A是在JVM加载A类时创建的,还是我调用A.class时创建的?

java - 子类和继承的问题