Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56669
  • 博文数量: 9
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-14 22:57
个人简介

沧海之一粟

文章分类

全部博文(9)

文章存档

2015年(2)

2014年(7)

我的朋友

分类: C/C++

2014-05-28 12:48:14

1,多态指的是通过基类的引用或指针访问派生类,从而表现出不同的行为。
2,多态不是指属性(field)的多态,而是指行为上的多态!


  1. #include <iostream>
  2. using namespace std;

  3. class A
  4. {
  5. public:
  6.     A(int i = 0)
  7.     {
  8.         v = i;
  9.     }
  10.     
  11.     virtual int get_val() const
  12.     {
  13.         cout << "virtual int A::get_val() const" << endl;
  14.         return v;
  15.     }
  16. //private:
  17.     int v;
  18. };

  19. class B : public A
  20. {
  21. public:
  22.     B(int i = 0)
  23.     {
  24.         v = i;
  25.     }
  26.     // inheriting constructor
  27.     //using A::A;

  28.     int get_val() const override
  29.     {
  30.         cout << "int B::get_val() const override" << endl;
  31.         return v;
  32.     }
  33. //private:
  34.     int v;
  35. };

  36. int main(void)
  37. {
  38.     B b1{2};
  39.     A *pa1 = &b1;
  40.     A a1 = b1;

  41.     cout << pa1->get_val() << endl;
  42.     cout << pa1->v << endl;
  43.     cout << a1.get_val() << endl;
  44.     cout << a1.v << endl;

  45.     return 0;
  46. }

输出结果:
int B::get_val() const override
2
0
virtual int A::get_val() const
0
0

由结果可以看出,通过A的指针pa1访问B的实例b1时,表现出的是B的行为(int B::get_val() const override),
但是通过pa1访问得到的却是A的属性v,而不是b1的属性。
阅读(1109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~