求输出结果
class A
{
public:
A ():m_iVal(0){test();}
virtual void func() { std::cout<<m_iVal<<‘ ’;}
void test(){func();}
public:
int m_iVal;
};
class B : public A
{
public:
B(){test();}
virtual void func()
{
++m_iVal;
std::cout<<m_iVal<<‘ ’;
}
};
int main(int argc ,char* argv[])
{
A*p = new B;
p->test();
return 0;
}
解答:B 继承自 A, 先 A 构造函数,输出 0 ,然后 B 构造函数, B 的 test 继承自 A ,然后找 func 函数找到 B 自己的,所以输出 1 ,然后 p->test() 再执行一次,输出 2