#include <iostream>
#include <string>
#include <cstring>
using namespace std;
//Carクラスの宣言
class Car {
private:
int num;
double gas;
char* pName;
public:
Car(const char* pN, int n, double g){
pName = new char[strlen(pN) + 1];
strcpy(pName, pN);
num = n;
gas = g;
cout << pName << "を作成しました。\n";
}
~Car(){
cout << pName << "を破棄します。\n";
delete[] pName;
}
Car(const Car& c){
cout << c.pName << "で初期化します。\n";
pName = new char[strlen(c.pName) + strlen("のコピー1") + 1];
strcpy(pName, c.pName);
strcat(pName, "のコピー1");
num = c.num;
gas = c.gas;
}
Car& operator=(const Car& c){
cout << pName << "に" << c.pName << "を代入します。\n";
if (this != &c) {
delete[] pName;
pName = new char[strlen(c.pName) + strlen("のコピー2") + 1];
strcpy(pName, c.pName);
strcat(pName, "のコピー2");
num = c.num;
gas = c.gas;
}
return *this;
}
};
int main()
{
Car mycar("mycar", 1234, 25.5);
Car car1 = mycar;
Car car2("car2", 0, 0);
car2 = mycar;
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovL0NhcuOCr+ODqeOCueOBruWuo+iogApjbGFzcyBDYXIgewpwcml2YXRlOgogICAgaW50IG51bTsKICAgIGRvdWJsZSBnYXM7CiAgICBjaGFyKiBwTmFtZTsKICAgIApwdWJsaWM6CiAgICBDYXIoY29uc3QgY2hhciogcE4sIGludCBuLCBkb3VibGUgZyl7CiAgICAgICAgcE5hbWUgPSBuZXcgY2hhcltzdHJsZW4ocE4pICsgMV07CiAgICAgICAgc3RyY3B5KHBOYW1lLCBwTik7CiAgICAgICAgbnVtID0gbjsKICAgICAgICBnYXMgPSBnOwogICAgICAgIGNvdXQgPDwgcE5hbWUgPDwgIuOCkuS9nOaIkOOBl+OBvuOBl+OBn+OAglxuIjsKICAgIH0KICAgIH5DYXIoKXsKICAgICAgICBjb3V0IDw8IHBOYW1lIDw8ICLjgpLnoLTmo4TjgZfjgb7jgZnjgIJcbiI7CiAgICAgICAgZGVsZXRlW10gcE5hbWU7CiAgICB9CiAgICBDYXIoY29uc3QgQ2FyJiBjKXsKICAgICAgICBjb3V0IDw8IGMucE5hbWUgPDwgIuOBp+WIneacn+WMluOBl+OBvuOBmeOAglxuIjsKICAgICAgICBwTmFtZSA9IG5ldyBjaGFyW3N0cmxlbihjLnBOYW1lKSArIHN0cmxlbigi44Gu44Kz44OU44O8MSIpICsgMV07CiAgICAgICAgc3RyY3B5KHBOYW1lLCBjLnBOYW1lKTsKICAgICAgICBzdHJjYXQocE5hbWUsICLjga7jgrPjg5Tjg7wxIik7CiAgICAgICAgbnVtID0gYy5udW07CiAgICAgICAgZ2FzID0gYy5nYXM7CiAgICB9CiAgICBDYXImIG9wZXJhdG9yPShjb25zdCBDYXImIGMpewogICAgICAgIGNvdXQgPDwgcE5hbWUgPDwgIuOBqyIgPDwgYy5wTmFtZSA8PCAi44KS5Luj5YWl44GX44G+44GZ44CCXG4iOwogICAgICAgIGlmICh0aGlzICE9ICZjKSB7CiAgICAgICAgICAgIGRlbGV0ZVtdIHBOYW1lOwogICAgICAgICAgICBwTmFtZSA9IG5ldyBjaGFyW3N0cmxlbihjLnBOYW1lKSArIHN0cmxlbigi44Gu44Kz44OU44O8MiIpICsgMV07CiAgICAgICAgICAgIHN0cmNweShwTmFtZSwgYy5wTmFtZSk7CiAgICAgICAgICAgIHN0cmNhdChwTmFtZSwgIuOBruOCs+ODlOODvDIiKTsKICAgICAgICAgICAgbnVtID0gYy5udW07CiAgICAgICAgICAgIGdhcyA9IGMuZ2FzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIENhciBteWNhcigibXljYXIiLCAxMjM0LCAyNS41KTsKICAgIENhciBjYXIxID0gbXljYXI7CiAgICBDYXIgY2FyMigiY2FyMiIsIDAsIDApOwogICAgY2FyMiA9IG15Y2FyOwoKICAgIHJldHVybiAwOwp9Cg==