AcWing 718. 实验 ---- C++ 使用运算符重载 << >> += 等符号
原题链接
困难
作者:
cheng2099
,
2021-01-16 15:05:07
,
所有人可见
,
阅读 405
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Animals_data {
friend istream& operator>>(istream&, Animals_data&);
friend ostream& operator<<(ostream&, const Animals_data&);
public:
Animals_data() = default;
Animals_data(unsigned n, string type) {
num = n;
animalType = type;
}
public:
string animal_type() const { return animalType; }
Animals_data& operator+=(const Animals_data&);
void setNum(unsigned n) {
num = n;
}
void setAnimalType(string type) {
animalType = type;
}
unsigned getUNum() {
return num;
}
double getNum() {
double dNum;
dNum = double(num);
return dNum;
}
string getAnimalTye() {
return animalType;
}
private:
unsigned num = 0;
string animalType;
};
istream&
operator>>(istream& in, Animals_data& s)
{
in >> s.num >> s.animalType;
return in;
}
ostream&
operator<<(ostream& out, const Animals_data& s)
{
out << s.num << " " << s.animalType;
return out;
}
bool compareAnimal(const Animals_data &lhs, const Animals_data &rhs)
{
return lhs.animal_type() == rhs.animal_type();
}
Animals_data& Animals_data::operator+=(const Animals_data &rhs) {
num += rhs.num;
return *this;
}
double percentVal(Animals_data &lhs, Animals_data &rhs) {
double p;
double lNum = lhs.getNum();
double rNum = rhs.getNum();
p = (lNum / rNum) * 100;
return p;
}
int main() {
unsigned no;
cin >> no;
vector<Animals_data> dataList;
Animals_data item;
while (no--) {
cin >> item;
dataList.push_back(item);
}
Animals_data* animal_all = new Animals_data(0, "A");
Animals_data* animal_coney = new Animals_data(0, "C");
Animals_data* animal_rat = new Animals_data(0, "R");
Animals_data* animal_frog = new Animals_data(0, "F");
for (vector<Animals_data>::iterator it = dataList.begin(); it != dataList.end(); it++){
*animal_all += (*it);
bool isconey = compareAnimal(*animal_coney, *it);
if (isconey) {
*animal_coney += (*it);
}
bool israt = compareAnimal(*animal_rat, *it);
if (israt) {
*animal_rat += (*it);
}
bool isfrog = compareAnimal(*animal_frog, *it);
if (isfrog) {
*animal_frog += (*it);
}
}
cout << "Total: " << animal_all->getNum() << " animals" << endl;
cout << "Total coneys: " << animal_coney->getNum() << endl;
cout << "Total rats: " << animal_rat->getNum() << endl;
cout << "Total frogs: " << animal_frog->getNum() << endl;
cout.flags(ios::fixed);
cout.precision(2);
double cRate = percentVal(*animal_coney, *animal_all);
cout << "Percentage of coneys: " << cRate << " %" << endl;
double cRat = percentVal(*animal_rat, *animal_all);
cout << "Percentage of rats: " << cRat << " %" << endl;
double cFrog = percentVal(*animal_frog, *animal_all);
cout << "Percentage of frogs: " << cFrog << " %" << endl;
return 0;
}