C++多态覆盖相关问题解疑

C++编程语言中的多态性是一个比较重要的概念,在实际应用中有许多比较重要的细节问题值得我们去关注。在这里就先来了解一下C++多态覆盖的一些问题,让大家从中对这方面的知识有一个更加深入的了解。

为了解决C++多态覆盖,需要尽可能的使用指针,而不是对象。C++在处理两者的时候是不一致的。在进行函数传递时,基类有可能将继承类的类型给掩盖掉,从而丧失了多态。

 
 
 
  1. class Base  
  2. {  
  3. public:  
  4. virtual void print()  
  5. {  
  6. cout<<"Base "<
  7. }  
  8. };  
  9. class SubA: public Base  
  10. {  
  11. public:  
  12. void print()  
  13. {  
  14. cout<<"SubA "<
  15. }  
  16. };  
  17. class SubB: public Base  
  18. {  
  19. public:  
  20. void print()  
  21. {  
  22. cout<<"SubB\n";  
  23. }  
  24. };  
  25. class Super  
  26. {  
  27. private:  
  28. Base a1;//对象  
  29. Base *a2;//指针  
  30. public:  
  31. Super(Base &a,Base *b)  
  32. {  
  33. aa1 = a;  
  34. a2 = b;  
  35. }  
  36. void print1()  
  37. {  
  38. a1.print();  
  39. }  
  40. void print2()  
  41. {  
  42. a2->print();  
  43. }  
  44. };  
  45. int main()  
  46. {  
  47. Base b;  
  48. SubA sa;  
  49. SubB sb;  
  50. Super s1(b,&b);  
  51. s1.print1();  
  52. s1.print2();  
  53. Super s2(sa,&sb);  
  54. s2.print1();  
  55. s2.print2();  

#t#上面结果可以看出

同是Base的子类,使用对象的类型被基类覆盖掉了,而使用指针则没有问题。

我认为是Super构造时,类的赋值造成的。

赋值和复制构造函数,经常会产生一些意想不到的副效应,而指针则不会。

在使用STL容器时,也尽量使用指针存放,除非是只对值感兴趣。

以上就是对C++多态覆盖的相关介绍。

新闻名称:C++多态覆盖相关问题解疑
文章链接:http://www.shufengxianlan.com/qtweb/news20/473820.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联