运算符重载 笔记3
重载运算符+
Boy.h
|
#pragma once #include <string>
class Boy { public: Boy(const char* name=NULL, int age=0, int salary=0, int darkHorse=0); ~Boy(); Boy& operator=(const Boy& boy); std::string description(void); private: char* name; int age; int salary; int darkHorse; //黑马值,潜力系数 unsigned int id; // 编号 static int LAST_ID; }; |
Boy.cpp
|
#include "boy.h" #include <string.h> #include <sstream>
int Boy::LAST_ID = 0; //初始值是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; //this->id = boy.id; //根据需求来确定是否要拷贝id return *this; }
std::string Boy::description(void) { std::stringstream ret; ret << "ID:" << id << "\t姓名:" << name << "\t年龄:" << age << "\t薪资:" << salary << "\t黑马系数:" << darkHorse; return ret.str(); } |
main.cpp
|
#include <iostream> #include "boy.h"
int main(void) { Boy boy1("Rock", 38, 58000, 10); Boy boy2, boy3;
std::cout << boy1.description() << std::endl; std::cout << boy2.description() << std::endl; std::cout << boy3.description() << std::endl;
boy3 = boy2 = boy1; std::cout << boy2.description() << std::endl; std::cout << boy3.description() << std::endl;
system("pause"); return 0; } |
注意:
注意赋值运算符重载的返回类型 和参数类型。
返回引用类型,便于连续赋值
参数使用应用类型, 可以省去一次拷贝
参数使用const, 便于保护实参不被破坏。

浙公网安备 33010602011771号