c++ / day04

1. 整理思维导图

2. 定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算符、逻辑运算符、自增自减运算符、插入/提取运算符)

cpp 复制代码
#include <iostream>

using namespace std;

class Person
{
    int *_ptr_age;
    string &_ref_name;
    int happiness;
public:
    //Person constructor,
    Person(int age, string &ref_name):_ptr_age(new int(age)), _ref_name(ref_name)
    {
        cout << "Person constructor with 2 params" << endl;
    }

    //destructor
    ~Person()
    {
       cout << "Person destructor" << endl;
       delete _ptr_age;

    }

    //copy constructor. Note: param need to be initilized for space
    Person(const Person &src):_ptr_age(new int(*(src._ptr_age))), _ref_name(src._ref_name)
    {
        cout << "Person copy constructor" << endl;
    }

    //assign constructor. Note it has been initilized, has space alread, just need copy value
    Person &operator=(const Person &src)
    {
        this->_ptr_age =src._ptr_age;
        this->_ref_name = src._ref_name;
      cout << "Person assign constructor" << endl;
      return *this;
    }

    //arithmetic operator overloading
    Person operator+(Person &other );

    //condition operator overloading
    bool operator>(Person &other);

    //loginal operator overloading
    bool operator&&(Person &other);

    //inc/dec operation overloading;
    Person operator++();

    //cout operation overloading;
    friend ostream &operator<<(ostream &out, Person &person);



    int get_age();
    int get_happiness();
    void set_happiness(int h);
    string get_name();
};

Person Person::operator+(Person &other)
{
    Person person(*this->_ptr_age, this->_ref_name);
    person.happiness = this->happiness + other.happiness;
    return person;
}

bool Person::operator>(Person &other)
{
    if(this->happiness > other.happiness)
    {
        return true;
    }
    else {
        return false;
    }
}

bool Person::operator&&(Person &other)
{
    if(this->happiness && other.happiness)
    {
        return true;
    }else{
        return false;
    }
}

Person Person::operator++()
{
    ++this->happiness;
    return *this;
}

ostream &operator<<(ostream &out, Person &person)
{
    out << "happiness value:" << person.get_happiness() << endl;
    return out;
}

class Stu
{
    double *_ptr_score;
    Person _person;

public:
    //constuctor
    Stu(double score, int age, string name):_ptr_score(new double (score)), _person(age, name)
    {
        cout << "Stu constructor with 2 params" << endl;
    }
    //destructor
    ~Stu()
    {
       cout << "Stu destructor" << endl;
       delete _ptr_score;
    }
    //copy constructor
    Stu(const Stu &src):_ptr_score(new double(*(src._ptr_score))), _person(src._person)
    {
        cout << "Stu copy constructor" << endl;
    }

    //assign constructor
    Stu &operator = (const Stu &src)
    {
        this->_ptr_score = src._ptr_score;
        this->_person = src._person;
        return *this;
    }

    void show();
};

int Person::get_age()
{
    return *_ptr_age;
}

string Person::get_name()
{
    return _ref_name;
}

int Person::get_happiness()
{
    return happiness;
}
void Person::set_happiness(int h)
{
    this->happiness = h;
}

void Stu::show()
{
    cout << "score = "<< *_ptr_score << endl;
    cout << "person age = "<< _person.get_age() << endl;
    cout << "person name = "<< _person.get_name() << endl;

}


int main()
{
    int age_a = 28;
    int age_b = 29;
    string name_z = "zhangsan";
    string name_l ="lisi";

    //double score_a = 99;
    //double score_b =98;

    Person person_zs(age_a, name_z);
    Person person_ls(age_b, name_l);
    person_zs.set_happiness(10);
    person_ls.set_happiness(9);


    ++person_zs ;
    cout << "++person_zs = "<< person_zs.get_happiness() << endl;

    cout << "person_zs + person_ls:"<< (person_zs + person_ls).get_happiness() << endl;

    cout << "person_zs > person_ls:"<< (person_zs > person_ls) << endl;

    person_ls.set_happiness(0);
    cout << "person_zs && person_ls:"<< (person_zs && person_ls) << endl;

    cout << person_zs << "---cout overloadning---"<< endl;


    return 0;
}

运行结果:

相关推荐
软件黑马王子3 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
闲猫3 小时前
go orm GORM
开发语言·后端·golang
黑不溜秋的4 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
李白同学4 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?6 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农6 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿6 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!6 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴6 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程6 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛