fork download
  1.  
  2. #include <iostream>
  3. #include <string>
  4. #include <cstring>
  5. using namespace std;
  6.  
  7. //Carクラスの宣言
  8. class Car {
  9. private:
  10. int num;
  11. double gas;
  12. char* pName;
  13.  
  14. public:
  15. Car(const char* pN, int n, double g){
  16. pName = new char[strlen(pN) + 1];
  17. strcpy(pName, pN);
  18. num = n;
  19. gas = g;
  20. cout << pName << "を作成しました。\n";
  21. }
  22. ~Car(){
  23. cout << pName << "を破棄します。\n";
  24. delete[] pName;
  25. }
  26. Car(const Car& c){
  27. cout << c.pName << "で初期化します。\n";
  28. pName = new char[strlen(c.pName) + strlen("のコピー1") + 1];
  29. strcpy(pName, c.pName);
  30. strcat(pName, "のコピー1");
  31. num = c.num;
  32. gas = c.gas;
  33. }
  34. Car& operator=(const Car& c){
  35. cout << pName << "に" << c.pName << "を代入します。\n";
  36. if (this != &c) {
  37. delete[] pName;
  38. pName = new char[strlen(c.pName) + strlen("のコピー2") + 1];
  39. strcpy(pName, c.pName);
  40. strcat(pName, "のコピー2");
  41. num = c.num;
  42. gas = c.gas;
  43. }
  44. return *this;
  45. }
  46. };
  47.  
  48. int main()
  49. {
  50. Car mycar("mycar", 1234, 25.5);
  51. Car car1 = mycar;
  52. Car car2("car2", 0, 0);
  53. car2 = mycar;
  54.  
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0s 4504KB
stdin
Standard input is empty
stdout
mycarを作成しました。
mycarで初期化します。
car2を作成しました。
car2にmycarを代入します。
mycarのコピー2を破棄します。
mycarのコピー1を破棄します。
mycarを破棄します。