main.cpp
注意:
注意赋值运算符重载的返回类型 和参数类型。
返回引用类型,便于连续赋值
参数使用引用类型, 可以省去一次拷贝
参数使用const, 便于保护实参不被破坏。
#include<iostream>
#include"Boy.h"
int main()
{
Boy boy1("zhs", 24, 20000, 10);
Boy boy2, boy3;
cout << boy1.description() << endl;
cout << boy2.description() << endl;
cout << boy3.description() << endl;
cout << "----------------------------------" << endl;
boy3 = boy2 = boy1;
cout << boy1.description() << endl;
cout << boy2.description() << endl;
cout << boy3.description() << endl;
system("pause");
return 0;
}
Boy.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
class Boy
{
public:
Boy(const char*name =NULL, int age=0,int salary=0,int darkHorse=0);
~Boy();
Boy&operator=(const Boy&boy);
string description();
private:
char*name;
int age;
int salary;
int darkHorse; //黑马,潜力值
unsigned int id; //编号
static int LAST_ID;
};
Boy.cpp
#include "Boy.h"
#include<sstream>
int Boy::LAST_ID = 0;
Boy::Boy(const char * name, int age, int salary, int darkHorse)
{
if (!name)
{
name = "为命名";
}
this->name = new char[strlen(name) + 1];
strcpy_s(this->name, strlen(name) + 1,name);
this->age = age;
this->salary = salary;
this->darkHorse = darkHorse;
this->id = ++LAST_ID;
}
Boy::~Boy()
{
if (name)
{
delete name;
}
}
Boy & Boy::operator=(const Boy & boy)
{
if (name)
{
delete name; //释放原来的内存
}
name = new char[strlen(boy.name) + 1];//分配新的内存
strcpy_s(name, strlen(boy.name) + 1, boy.name);
this->age = boy.age;
this->salary = boy.salary;
this->darkHorse = boy.darkHorse;
return*this;
}
string Boy::description()
{
stringstream ret;
ret << "ID:" << id << "\t姓名:" << name << "\t年龄:" << age << "\t薪资:"
<< salary << "\t黑马系数:" << darkHorse;
return ret.str();
}