#include <iostream>
using namespace std;
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;
}
// 用A 基类的指针 去 引用一个 子类 ,就可能会发生 动态绑定
// 初始化B的时候,因为B是从A继承来的,所以要先初始化一个A
// A的构造函数,调用的 test(), 打印出0
//
// 进行B的构造函数,调用test(), test()中又会去调用func ,这是func发生动态绑定,
// 调用B的func, ++m_iVal之后, 打印出1
//
// 然后运行到 p->test()
// 又调用到子类的 test(), 再调用func(), 又发生动态绑定 ++m_iVal, 之后,又打印出 2
//
// 所以结果是
//
// 012
//
//
面试题 C++ 动态绑定 虚函数
最新推荐文章于 2021-05-10 20:12:31 发布