题目描述
有一群猫猫,每只猫都有自己的名称和体重。 用类来描述猫,名称和体重都是私有属性,要求加入属性的get方法。其他函数根据需要自己定义
创建一个动态的猫对象数组,存储各只猫的名称和体重 根据猫的体重对数组做升序排序,并输出排序后每只猫的名称
题目涉及的数值均用整数处理
输入
第一行输入n表示有n只猫 第二行输入一只猫的名称和体重 依次输入n行 输出输出一行,输出排序后的猫的名称
样例输入
4
巧克力胖三斤 1500
自来水瘦八两 400
芝士蛋糕肥六斤 3000
蔬菜沙拉轻四两 200
样例输出
蔬菜沙拉轻四两
自来水瘦八两
巧克力胖三斤
芝士蛋糕肥六斤
#include<iostream>
#include<string.h>
using namespace std;
class cat{
private:
char *cat_name;
int cat_weight;
public:
void Set(char *name,int weight){
int len=strlen(name);
cat_name=new char[len+1];
strcpy(cat_name,name);
cat_weight=weight;
}
void print(cat p){
cout<<p.cat_name<<" ";
}
char * get_name(){
return cat_name;
}
int get_weight(){
return cat_weight;
}
};
void compare(cat &p,cat &q){//这里使用必须引用!详情看下面解析
cat temp;
if(p.get_weight()>q.get_weight()){
temp=p;
p=q;
q=temp;
}
}
int main(){
int n,i,weight,j;
char name[100];
cat *p;
cin>>n;
p=new cat[n];//创建猫猫类的动态数组
for(i=0;i<n;i++){
cin>>name>>weight;
p[i].Set(name,weight);//依次存入数据
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
compare(p[i],p[j]);//冒泡升序法来对猫咪继续排序
for(i=0;i<n;i++)
p->print(p[i]);
delete p;
}
引用
主函数外定义的交换函数里面的参数必须为引用参数,一般的参数是复制一个相同的值在函数中继续程序计算,不会改变原数据的值,但交换数组的两个元素则需要引用,不然无法改变主函数中两个数组元素的位置
由于外面的函数不能访问私有的数据成员,一般会在公有定义一个get成员函数来访问私有的数据成员,如
int get_weight(){
return cat_weight;
}
}
类里的 函数的参数问题
一开始我有一个疑问,我定义了一个猫咪类的数组,如何让函数知道我要的是具体哪只猫咪的体重呢?函数的参数应该写什么进去才可以获得相应的猫咪体重
但其实我们一般是先创建了一个类的数据如加菲jiafei,用jiafei调用get_weight函数的时候,电脑已经知道我们想要的是加菲这只猫的体重,所以不需要参数
cat jiafei;
.......(省略过程)
cout<<jiafei.get_weight();