请选择 进入手机版 | 继续访问电脑版
查看: 432|回复: 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. }
复制代码


回复

使用道具 举报