查看: 1386|回復: 0

[軟件工程] 理解常量成員函數

725

主題

725

帖子

2188

積分

猿er

Rank: 1

積分
2188
發表于 2016-8-14 18:57:31
這是一個c++多態練習的程序,其實我當初寫的時候遇到的最大的問題就是常量成員函數,所以,這段代碼包含了大量的常量成員函數,希望對大家理解c++的常量成員函數有個參考。
  1. #include<iostream>
  2. using namespace std;
  3. #include<iomanip>
  4. using std::setw;
  5. #include<string>
  6. using std::string;
  7. #include"Employee.h"
  8. #include"SalariedEmployee.h"
  9. #include"CommissionEmployee.h"
  10. #include"HourlyEmployee.h"
  11. #include"BasePlusCommissionEmployee.h"
  12. //double Add(double a, double b)//可以接收常量
  13. //{
  14. // double c;
  15. // c = a + b;
  16. // return c;
  17. //}
  18. //double Add(const double a, const double b)//函數可以接收常量
  19. //const修飾函數返回值,一般函數返回值是指針或者引用時用const修飾返回值有意義,
  20. //但是,若函數以按值傳遞方式返回函數值,則加const修飾返回值沒什么意義,因為返回值會被復制到
  21. //臨時開辟的內存空間。
  22. //{
  23. // double c;
  24. // return (c = a + b);
  25. //}
  26. //class A
  27. //{
  28. //public:
  29. // A()
  30. // {
  31. // cout << "This is an empty string!" << endl;
  32. // }
  33. //
  34. // A(const string &ms)
  35. // {
  36. // SetMyString(ms);
  37. // }
  38. // double Add(const double a, const double b) const
  39. // //常量成員函數只能修改類的常量成員!
  40. // //這句話表達了兩個意思:
  41. // //(1)常量成員函數只能訪問類的常量成員函數!
  42. // //(2)常量成員函數不能修改類的數據成員!
  43. // //由(1)(2)可知,常量成員函數只是限定類的成員的修改權限!
  44. // //因為a,b,c不是類的數據成員,所以可以修改!
  45. // {
  46. // double c;
  47. // return (c = a + b);
  48. // }
  49. //
  50. // void SetMyString(const string &ms)
  51. // {
  52. // MyString = ms;
  53. // }
  54. //
  55. // string GetMyString() const
  56. // {
  57. // return MyString;
  58. // }
  59. //
  60. //private:
  61. // string MyString;
  62. //};
  63. int main()
  64. {
  65. /*A aa;
  66. cout << aa.GetMyString();*/
  67. //SalariedEmployee mySalariedEmployee("馬云","計算機");
  68. //CommissionEmployee myCommissionEmployee("馬化騰","網絡",10000, 0.7);
  69. //const CommissionEmployee cCommissionEmployee("習近平","國家主席",30000,1);
  70. //CommissionEmployee rCommissionEmployee(cCommissionEmployee);
  71. //const SalariedEmployee cSalariedEmployee("馬賽克","日本",1000);
  72. //SalariedEmployee rSalariedEmployee(cSalariedEmployee);
  73. //Employee* EmployeePtr = &mySalariedEmployee;
  74. //EmployeePtr->print();//調用派生類成員函數
  75. //cout << EmployeePtr->GetName() << endl;
  76. //cCommissionEmployee.print();
  77. //rCommissionEmployee.print();
  78. //cSalariedEmployee.print();
  79. //rSalariedEmployee.print();
  80. //mySalariedEmployee.print();
  81. //cout << myCommissionEmployee.GetRever() << ' ' << myCommissionEmployee.GetRatio() << endl;
  82. //cout << myCommissionEmployee.GetSalary() << endl;
  83. //myCommissionEmployee.print();
  84. //double a = 1, b = 1;
  85. //cout << "1 + 1 = " << Add(a, b) << endl;
  86. /*cout << Add(1, 1) << " " << Add(a, b) << endl;
  87. cout << aa.Add(1, 1) << endl;*/
  88. BasePlusCommissionEmployee baseplus("溫家寶", "總理",20000,1);
  89. baseplus.print();
  90. return 0;
  91. }
復制代碼


回復

使用道具 舉報