运算符重载 笔记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, 便于保护实参不被破坏。

posted @ 2020-06-12 09:49  CollisionDimension  阅读(65)  评论(0)    收藏  举报