面试题 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 // //
相关文章推荐
- 求编译器中数的最值(c++)
- boost.spirit之解析C++头文件
- C++ allocator
- 在C语言中利用PCRE实现正则表达式
- 简单的学生信息处理程序实现(C++程序设计第2周)
- 黑马程序员——C语言——指针
- 一个对战程序的C++源代码
- UE4 - C++ 射线捕捉
- C语言实现去除字符串中空格
- C++学习_继承覆盖重载
- C++学习随笔
- C++学习之继承篇
- C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等
- Observer(观察者)设计模式
- C语言 变量的存储方式和生命周期
- c++ BASE64加解密操作
- b树的实现(c++)
- N种方法使用C++调用C#.NET库
- C语言strcat()函数:连接字符串
- C语言里的puts()函数怎么用