您的位置:首页 > 编程语言 > C语言/C++

面试题 C++ 动态绑定 虚函数

2015-12-08 19:14 267 查看
#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
//
//
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: