最胖的加菲(类与对象+数组)(2)
另一种写法,采用二级指针定义动态对象数组
题目描述
有一群猫猫,每只猫都有自己的名称和体重。
用类来描述猫,名称和体重都是私有属性,要求加入属性的get方法。其他函数根据需要自己定义
创建一个动态的猫对象数组,存储各只猫的名称和体重
根据猫的体重对数组做升序排序,并输出排序后每只猫的名称
题目涉及的数值均用整数处理
输入
第一行输入n表示有n只猫
第二行输入一只猫的名称和体重
依次输入n行
输出
输出一行,输出排序后的猫的名称
示例输入
4
chocolate 1500
water 400
cheese 3000
vegetable 200
示例输出
vegetable water chocolate cheese
#include<iostream>
#include<cmath>
#include<iomanip>
#include <algorithm>
#include<string>
using namespace std;
class Cat {
string name;
int weight;
public:
Cat(string _name, int _weight);
string getName();
int getWeight();
};
Cat::Cat(string _name,int _weight):name(_name),weight(_weight){}
string Cat::getName() { return this->name; }
int Cat::getWeight() { return this->weight; }
bool cmp(Cat *a, Cat *b) {
return a->getWeight() < b->getWeight();
}
int main()
{
int i,t;
string name1;
int weight1;
cin>>t;
Cat **Cats=new Cat*[t];//用二级指针开辟动态数组
for(i=0;i<t;i++)
{
cin>>name1>>weight1;
Cats[i]=new Cat(name1,weight1);
}
sort(Cats,Cats+t,cmp);
for(i=0;i<t;i++)
cout<<Cats[i]->getName()<<" ";//注意要用->而不是.
for(i=0;i<t;i++)//建立了动态数组记得销毁
delete Cats[i];
delete []Cats;
return 0;
}