程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++多態覆蓋相關問題解疑

C++多態覆蓋相關問題解疑

編輯:C++入門知識

C++編程語言中的多態性是一個比較重要的概念,在實際應用中有許多比較重要的細節問題值得我們去關注。在這裡就先來了解一下C++多態覆蓋的一些問題,讓大家從中對這方面的知識有一個更加深入的了解。

為了解決C++多態覆蓋,需要盡可能的使用指針,而不是對象。C++在處理兩者的時候是不一致的。在進行函數傳遞時,基類有可能將繼承類的類型給掩蓋掉,從而喪失了多態。

  1. class Base  
  2. {  
  3. public:  
  4. virtual void print()  
  5. {  
  6. cout<<"Base "<<endl;  
  7. }  
  8. };  
  9. class SubA: public Base  
  10. {  
  11. public:  
  12. void print()  
  13. {  
  14. cout<<"SubA "<<endl;  
  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();  

  • C++命令行模式編譯設置技巧分享
  • C++定義變量使用方式簡介
  • C++多線程測試要點總結
  • C++ explicit關鍵字應用方法詳解
  • C++函數重載通過C語言實現
上面結果可以看出

同是Base的子類,使用對象的類型被基類覆蓋掉了,而使用指針則沒有問題。

我認為是Super構造時,類的賦值造成的。

賦值和復制構造函數,經常會產生一些意想不到的副效應,而指針則不會。

在使用STL容器時,也盡量使用指針存放,除非是只對值感興趣。

以上就是對C++多態覆蓋的相關介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved