c++实验二 :指针和数组

一、 明确实验目的
1、 通过动态内存分配实现动态数组,并体会指针在其中的作用;
2、理解C++中深复制、浅复制的区别和适用场合,掌握其应用方法;
3、分别使用字符数组和标准C++库的string类对象练习处理字符串的方法;
4、运用所学知识,实现简单的数据结构,培养分析和解决实际问题的能力。
1、认真审题
建立一个名为CStudent的类,该类有以下几个属性:学号、姓名(使用字符指针)、成绩,并为上述属性定义相应的方法。
用C++ 面向对象的程序设计方法,找到并输出存放在CStudent类动态数组中学生成绩最高的学生信息(需考虑分数相同的情况,输出学号、姓名和成绩)。
2、设计CStudent类:
(1)数据成员:学号、姓名(使用字符指针,例如char * Name)、成绩;
(2)成员函数:
默认构造函数、有参构造函数、复制构造函数、析构函数;重点难点在于该类的构造函数和复制构造函数的定义。
(3)其他必要的成员函数,如赋值函数、取值函数、显示输出函数。
3、按要求查找并输出相关的信息。
(1)动态创建一个CStudent类对象数组,数组的大小由键盘输入。
(2)用函数实现查找最大值的功能。
(3)在main函数中输出成绩最高的学生基本信息(如有成绩相同的情况,均输出)。

#include
#include
using namespace std;
class Cstudent
{
	private :
		long long number;
		char *p;//字符指针 
		int score;
	public:
		Cstudent(long n,char *q,int s);//默认构造
		Cstudent(const Cstudent &s);//复制构造 
		friend void max(Cstudent*st,int count1);//友元函数方便后面比较成绩大小 实质上就是一个数组排序; 
		void input();//输入相应的数据
		void show();//展示 
		~Cstudent(); //析构函数
};
Cstudent::Cstudent(long n=0,char *q="no mame",int s=0)//有默认值 
{
	p=new char[20];//只用在构造函数的地方分配空间 
	strcpy(p,q);
	number=n;
	score=s;
}
Cstudent::Cstudent(const Cstudent &s)
{
	number=s.number;
	score=s.score;
	p=new char (*s.p);//深复制函数 
} 
void Cstudent:: input()//录入数据 
{
	long long num;
	int s;
	cout<<"请输入姓名:"<<endl;
	gets(p);
	cout<<"请输入学号,成绩:"<<endl;
	cin>>num>>s;
	number=num;
	score=s;
	cin.ignore();
}
void Cstudent ::show()
{
	cout<<"姓名:";
	puts(p);
	cout<<"学号:"<<number<<endl<<"成绩:"<<score<<endl;
}
Cstudent::~Cstudent()
{
	delete []p;//与前面的new对应 
}
void max(Cstudent*st,int count1)
{
	int maxx=0;
	int j;
	for(int i=0;i<count1;i++)
	{
		if(st[i].score>maxx)
		{
			maxx=st[i].score;
		 	j=i;
		}
	}
	for(int i=0;i<count1;i++)
	{
		if(st[i].score==maxx)
		{
			st[i].show();
			cout<<endl;
		}
	}
}
int main()
{	cout<<"请输入对象的个数:"<<endl;
	int a;
	cin>>a;
	cin.ignore();
	const int count=a;
	Cstudent*str=new Cstudent[count];
	for(int i=0;i<count;i++)
	{
		str[i].input();
	}
	max(str,count); 
	return 0;
}



你可能感兴趣的:(c++)