Liny_@NotePad

沉迷ACG中

C++的继承与多态demo

YOYO posted @ 2009年8月20日 21:51 in 【C/C++】 with tags 继承 多态 , 2110 阅读

继承(无虚函数):

  1. #include <iostream>
  2.  
  3. class A
  4. {
  5. public:
  6.         void fun() { std::cout << "A::fun()" << std::endl; }
  7. };
  8.  
  9. class B: public A
  10. {
  11. public:
  12.         void fun() { std::cout << "B::fun()" << std::endl; }
  13.         void fun2() { std::cout << "B::fun2()" << std::endl; }
  14. };
  15.  
  16. void main(void)
  17. {
  18.         A a;
  19.         a.fun();                //      A::fun()
  20.  
  21.         B b;
  22.         b.fun();                //      B::fun()
  23.         b.fun2();              //     B::fun2()
  24.  
  25.         A* rA = &b;
  26.         rA->fun();            //    A::fun()
  27.         std::cout << &b << " " << rA << std::endl;
  28.        
  29.         B* rB = static_cast<B*> (&a);
  30.         rB->fun();            //    B::fun()
  31.         rB->fun2();          //   B::fun2()
  32.         std::cout << &a << " " << rB << std::endl;
  33.  
  34.         system("pause");
  35. }

多态:

  1. #include <iostream>
  2.  
  3. class A
  4. {
  5. public:
  6.         virtual void fun(void) { std::cout << "A::fun()" << std::endl; }
  7. };
  8.  
  9. class B: public A
  10. {
  11. public:
  12.         void fun(void) { std::cout << "B::fun()" << std::endl; }
  13.         void fun2(void) { std::cout << "B::fun2()" << std::endl; }
  14. };
  15.  
  16. void main(void)
  17. {
  18.         A a;
  19.         a.fun();                //      A::fun()
  20.  
  21.         B b;
  22.         b.fun();                //      B::fun()
  23.         b.fun2();              //     B::fun2()
  24.  
  25.         A* rA = &b;
  26.         rA->fun();            //    B::fun()
  27.  
  28.         B* rB = static_cast<B*> (&a);
  29.         rB->fun();            //    A::fun()
  30.         rB->fun2();          //   B::fun2()
  31.  
  32.         system("pause");
  33. }

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter