【发布时间】:2012-01-08 08:30:47
【问题描述】:
可能重复:
C++ virtual function from constructor
Calling virtual functions inside constructors
这个问题是面试时问的。
我想我已经正确回答了第一部分,但不确定第二部分。事实上,我对第二部分一无所知。
- 以下代码生成什么输出?为什么?
- 如果将 A::Foo() 设为纯虚函数,它会生成什么输出?
当我尝试使用 virtual void foo() = 0; 在我的编译器上运行相同的问题时,它会抛出
错误“未定义对 `A::Foo()' 的引用”
#include <iostream>
using namespace std;
class A
{
public:
A()
{
this->Foo();
}
virtual void Foo()
{
cout << "A::Foo()" << endl;
}
};
class B : public A
{
public:
B()
{
this->Foo();
}
virtual void Foo()
{
cout << "B::Foo()" << endl;
}
};
int main(int, char**)
{
B objectB;
return 0;
}
【问题讨论】:
-
那么...你现在有什么问题?
-
1.第一个问题的答案是:A::Foo() B::Foo() 2. sec 问题的答案是:它取决于如果您将 A 类更改为:class A { public: A() { this ->Foo(); } 虚拟 void Foo() = 0 { cout Foo(); 会出现编译错误} 虚空 Foo() = 0; };
标签: c++ inheritance