C++的继承与多态demo

本文通过C++代码示例介绍了非虚拟继承与多态的区别。在非虚拟继承中,基类指针调用派生类的同名方法会执行基类的方法,而多态则能在运行时根据对象的实际类型选择正确的方法执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承(非virtual方式继承):

  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. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值