1
0

strquote.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // strquote.cpp -- different designs
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. string version1(const string & s1, const string & s2);
  6. const string & version2(string & s1, const string & s2); // has side effect
  7. const string & version3(string & s1, const string & s2); // bad design
  8. int main()
  9. {
  10. string input;
  11. string copy;
  12. string result;
  13. cout << "Enter a string: ";
  14. getline(cin, input);
  15. copy = input;
  16. cout << "Your string as entered: " << input << endl;
  17. result = version1(input, "***");
  18. cout << "Your string enhanced: " << result << endl;
  19. cout << "Your original string: " << input << endl;
  20. result = version2(input, "###");
  21. cout << "Your string enhanced: " << result << endl;
  22. cout << "Your original string: " << input << endl;
  23. cout << "Resetting original string.\n";
  24. input = copy;
  25. result = version3(input, "@@@");
  26. cout << "Your string enhanced: " << result << endl;
  27. cout << "Your original string: " << input << endl;
  28. // cin.get();
  29. // cin.get();
  30. return 0;
  31. }
  32. string version1(const string & s1, const string & s2)
  33. {
  34. string temp;
  35. temp = s2 + s1 + s2;
  36. return temp;
  37. }
  38. const string & version2(string & s1, const string & s2) // has side effect
  39. {
  40. s1 = s2 + s1 + s2;
  41. // safe to return reference passed to function
  42. return s1;
  43. }
  44. const string & version3(string & s1, const string & s2) // bad design
  45. {
  46. string temp;
  47. temp = s2 + s1 + s2;
  48. // unsafe to return reference to local variable
  49. return temp;
  50. }