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

Dear 丶 2022-08-18 03:16 233阅读 0赞
  1. #include <iostream>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6. A ():m_iVal(0){
  7. test();
  8. }
  9. virtual void func() {
  10. std::cout<<m_iVal<<"";
  11. }
  12. void test(){
  13. func();
  14. }
  15. public:
  16. int m_iVal;
  17. };
  18. class B : public A
  19. {
  20. public:
  21. B(){
  22. test();
  23. };
  24. virtual void func()
  25. {
  26. ++m_iVal;
  27. std::cout<<m_iVal<<"";
  28. }
  29. };
  30. int main(int argc ,char* argv[])
  31. {
  32. A*p = new B;
  33. p->test();
  34. return 0;
  35. }
  36. // 用A 基类的指针 去 引用一个 子类 ,就可能会发生 动态绑定
  37. // 初始化B的时候,因为B是从A继承来的,所以要先初始化一个A
  38. // A的构造函数,调用的 test(), 打印出0
  39. //
  40. // 进行B的构造函数,调用test(), test()中又会去调用func ,这是func发生动态绑定,
  41. // 调用B的func, ++m_iVal之后, 打印出1
  42. //
  43. // 然后运行到 p->test()
  44. // 又调用到子类的 test(), 再调用func(), 又发生动态绑定 ++m_iVal, 之后,又打印出 2
  45. //
  46. // 所以结果是
  47. //
  48. // 012
  49. //
  50. //

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ 动态

    C++中动态绑定 定义 c++中动态绑定是将一个过程调用与相应代码链接起来的行为。是指与给定的过程调用相关联的代码,只有在运行期才可知的一种绑定,他是[多态][Li

    相关 C++动态和静态

    为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。 需要理解四个名词: 1、对象的静态类型:对象在