项目练习之类的使用 (第一卷项目十的练习)
一 项目练习一
创建一个类,
用来表示“玩具” 文具, 有以下数据: 名称,价格,产地。
在使用中,需要获取它的名称, 价格, 产地。
注意:根据自己当前的优惠情况,有一个对外的价格。
//-------------------  main.cpp -------------------
#include <iostream>
#include "Toy.h"
int main()
{
    Toy toy("变形金刚", 1600, "China");
    cout << toy.getName() << " 价格:" << toy.getPrice() << " 产地:" << toy.getOrigin() << endl;
    cout << "全场五折促销:" << endl;
    toy.setDiscount(0.5);
    cout << toy.getName() << " 价格:" << toy.getPrice() << " 产地:" << toy.getOrigin() << endl;
    return 0;
}
//---------------  Toy 类 ----------------
/* Toy.h */
#pragma once
#include <string>
using namespace std;
class Toy
{
public:
    Toy();
    Toy(string name, int price, string origin, double discount = 1);
    ~Toy();
    string getName() const;
    int getPrice() const;
    string getOrigin() const;
    void setDiscount(double discount);
private:
    string name;       // 名称
    int price;         // 价格
    string origin;     // 产地
    double discount;   // 折扣
};
/* Toy.cpp */
#include "Toy.h"
Toy::Toy()
{
    name = "";
    price = 0;
    origin = "";
    discount = 1;
}
Toy::Toy(string name, int price, string origin, double discount)
{
    this->name = name;
    this->price = price;
    this->origin = origin;
    this->discount = discount;
}
Toy::~Toy()
{
}
string Toy::getName() const
{
    return name;
}
int Toy::getPrice() const
{
    return (int)(price * discount);
}
string Toy::getOrigin() const
{
    return origin;
}
void Toy::setDiscount(double discount)
{
    this->discount = discount;
}

二 项目练习二
定义一个类,来表示某模拟养成游戏中人物:
每个人物, 有昵称,年龄,性别, 配偶, 朋友,
支持的活动有:结婚,离婚, 交友,断交,询问昵称,询问性别,询问年龄, 简介等。
//-------------------  main.cpp  ------------------
#include "Human.h"
#include <iostream>
using namespace std;
int main()
{
    Human lhc("令狐冲", 25, MAN);
    Human ryy("任盈盈", 26, WOMAN);
    Human tbg("田伯光", 30, MAN);
    Human yls("岳灵珊", 20, WOMAN);
    Human cx("冲虚道长", 55, MAN);
    lhc.marry(&yls);
    Human* who = lhc.getLover();
    cout << lhc.getName() << "的配偶是:" << lhc.getLover()->getName() << endl;
    cout << who->getName() << "的配偶是:" << who->getLover()->getName() << endl;
    cout << endl << "-------离婚-------" << endl;
    lhc.divorce();
    if (lhc.getLover() == NULL)
    {
        cout << lhc.getName() << "离婚成功,单身" << endl;
    }
    else
    {
        cout << lhc.getName() << "离婚失败,配偶是:" << lhc.getLover()->getName() << endl;
    }
    lhc.addFriend(&tbg);
    lhc.addFriend(&cx);
    lhc.addFriend(&ryy);
    vector<Human*> friends = lhc.getFriends();
    cout << lhc.getName() << "的朋友们有:";
    for (int i = 0; i < friends.size(); i++)
    {
        cout << friends[i]->getName() << " ";
    }
    cout << endl << endl << "----------删朋友-----------" << endl;
    lhc.delFriend(&cx);
    friends = lhc.getFriends();
    cout << lhc.getName() << "的朋友们有:";
    for (int i = 0; i < friends.size(); i++)
    {
        cout << friends[i]->getName() << " ";
    }
    cout << endl;
    return 0;
}
//--------------------  Human 类  --------------------
/* Human.h */
#pragma once
#include <string>
#include <vector>
using namespace std;
typedef enum gender //性别
{
    MAN,    // 男人
    WOMAN   // 女人
}gender_t;
class Human
{
public:
    Human();
    Human(string name, int age, gender_t gender, Human* lover = NULL);
    ~Human();
    string getName() const;
    int getAge() const;
    gender_t getGender() const;
    Human* getLover() const;
    vector<Human*> getFriends() const;
    string description() const;
    void marry(Human* lover);
    void divorce();
    void addFriend(Human* other);
    void delFriend(Human* other);
private:
    string name;               // 姓名
    int age;                   // 年龄
    gender_t gender;           // 性别
    Human* lover;              // 配偶,这里是聚合关系
    vector<Human*> friends;    // 朋友
};
/* Human.cpp */
#include "Human.h"
#include <sstream>
Human::Human()
{
    name = "";
    age = 0;
    gender = MAN;
    lover = NULL;
}
Human::Human(string name, int age, gender_t gender, Human* lover)
{
    this->name = name;
    this->age = age;
    this->gender = gender;
    this->lover = lover;
}
Human::~Human()
{
}
string Human::getName() const
{
    return name;
}
int Human::getAge() const
{
    return age;
}
gender_t Human::getGender() const
{
    return gender;
}
Human* Human::getLover() const
{
    return lover;
}
vector<Human*> Human::getFriends() const
{
    return friends;
}
string Human::description() const
{
    stringstream des;
    des << name << " 年龄:" << age << " 性别:" << (gender == MAN ? "男" : "女");
    return des.str();
}
void Human::marry(Human* lover)
{
    if (gender == lover->gender)
    {
        return;
    }
    this->lover = lover;
    lover->lover = this;
}
void Human::divorce()
{
    if (lover == NULL)
    {
        return;
    }
    lover->lover = NULL;
    this->lover = NULL;
}
void Human::addFriend(Human* other)
{
    friends.push_back(other);
}
void Human::delFriend(Human* other)
{
    for (auto it = friends.begin(); it != friends.end();)
    {
        if (*it == other)
        {
            it = friends.erase(it);
        }
        else 
        {
            it++;
        }
    }
}

三 项目练习三
- 定义一个或多个类,来描述以下需求:
汽车,有多个轮胎,一个发动机,品牌,型号, 价格, 行驶里程。
轮胎,有品牌,气压。
发动机,有品牌,型号。 
//---------------  main.cpp  --------------
#include <iostream>
#include "Car.h"
int main()
{
    Car car("宝马", 7, 300000,"米其林", 2.5, "宝马",3.5);
    cout << car.description() << endl;
    return 0;
}
//---------------  Engine 类  -------------------
/* Engine.h */
#pragma once
#include <string>
using namespace std;
// 发动机类
class Engine
{
public:
    Engine();
    Engine(const string& brand, float version);
    ~Engine();
    string description() const;
private:
    string brand;     // 品牌
    float version;    // 型号
};
/* Engine.cpp */
#include "Engine.h"
#include <sstream>
#include <iostream>
Engine::Engine()
{
    brand = "";
    version = 0;
}
Engine::Engine(const string& brand, float version)
{
    this->brand = brand;
    this->version = version;
}
Engine::~Engine()
{
    cout << __FUNCTION__ << endl;
}
string Engine::description() const
{
    stringstream ret;
    ret << "发动机(品牌:" << brand << " 型号:" << version << ")";
    return ret.str();
}
//---------------  Tire 类  -------------------
/* Tire.h */
#pragma once
#include <string>
using namespace std;
// 轮胎类
class Tire
{
public:
    Tire(const string& brand = "米其林", float pressure = 2.5);
    ~Tire();
    string getBrand() const;
    float getPressure() const;
    string description() const;
private:
    string brand;     // 品牌
    float pressure;   // 胎压
};
/* Tire.cpp */
#include "Tire.h"
#include <sstream>
#include <iostream>
Tire::Tire(const string& brand, float pressure)
{
    this->brand = brand;
    this->pressure = pressure;
}
Tire::~Tire()
{
    cout << __FUNCTION__ << endl;
}
string Tire::getBrand() const
{
    return brand;
}
float Tire::getPressure() const
{
    return pressure;
}
string Tire::description() const
{
    stringstream ret;
    ret << "轮胎(品牌:" << brand << " 胎压:" << pressure << ")";
    return ret.str();
}
//---------------  Car 类  -------------------
/* Car.h */
#pragma once
#include <string>
#include "Engine.h"
#include "Tire.h"
using namespace std;
class Car
{
public:
    Car();
    Car(const string& carBrand, float carVersion, int price,
        const string& tireBrand, float tirePressure,
        const string& engineBrand, float engineVersion);
    ~Car();
    Engine getEngine() const;
    const Tire* getTires(int i) const;  //参数i:第几个轮胎
    string getBrand() const;
    float getVersion() const;
    int getPrice() const;
    int getMileage() const;
    string description() const;
private:
    Tire tires[4];    // 轮胎,这里是组合关系
    Engine engine;    // 发动机,这里是组合关系
    string brand;     // 汽车品牌 
    float version;    // 汽车型号
    int price;        // 价格
    int mileage;      // 行驶里程
};
/* Car.cpp */
#include "Car.h"
#include <iostream>
#include <sstream>
Car::Car()
{
}
Car::Car(const string& carBrand, float carVersion, int price, 
    const string& tireBrand, float tirePressure, 
    const string& engineBrand, float engineVersion)
    :tires{ {tireBrand,tirePressure}, {tireBrand,tirePressure}, {tireBrand,tirePressure}, {tireBrand,tirePressure}},
    engine(engineBrand, engineVersion)
{
    this->brand = carBrand;
    this->version = carVersion;
    this->price = price;
    this->mileage = 0;
}
Car::~Car()
{
    cout << __FUNCTION__ << endl;
}
Engine Car::getEngine() const
{
    return engine;
}
const Tire* Car::getTires(int i) const
{
    return &tires[i];  //这里是常函数,所以返回值类型也应该是常指针
}
string Car::getBrand() const
{
    return brand;
}
float Car::getVersion() const
{
    return version;
}
int Car::getPrice() const
{
    return price;
}
int Car::getMileage() const
{
    return mileage;
}
string Car::description() const
{
    stringstream ret;
    ret << "汽车(品牌:" << brand << " 型号:" << version << " 价格:" << price << " 行驶里程:" << mileage << ")" << endl
        << tires[0].description() << endl << engine.description() << endl;
    return ret.str();
}

                    
                
                
            
        
浙公网安备 33010602011771号