扩展练习4(学生类设计).设计一个友元函数,按照成绩从高到低的顺序输出姓名、学号和成绩信息。

ahys 2013-05-31 10:33:59
#include<iostream>
using namespace std;
class CStudent{
private:
int id_,math_,forlan_,computer_;//right type :double;
char *name_;
public:
CStudent(int id=0,char *name=" ",int math=0,int forlan=0,int computer=0):id_(id),name_(name),math_(math),forlan_(forlan),computer_ (computer )
{

}
int getAverage();
int getTotal();
void displayInfor();
void setName(char * name);
void setId(int id);
friend void getRank(CStudent grade[])
{
cout<<"chufa "<<endl;
int num=sizeof(grade)/sizeof(grade[0]);
cout<<"chufa "<<endl;
for(int i=0;i<num-1;i++)//触发不了
{
cout<<"chufa "<<endl;
for(int j=i+1;j<num;j++)
{
if(grade[i].getTotal() < grade[j].getTotal())
{
CStudent temp;
temp=grade[i];
grade[i]=grade[j];
grade[j]=temp;
cout<<i<<endl;
}
}
}
for(int i=0;i<num;i++)
{
grade[i].displayInfor();
}
}
};
int CStudent::getAverage()
{
return (math_+forlan_+computer_ )/3;
}
int CStudent::getTotal ()
{
return math_+forlan_+computer_;
}
void CStudent::displayInfor ()
{
cout<<"name: "<<name_ <<" ID: "<<id_<<" math: "<<math_<<
" foreign langue: "<<forlan_<<" computer: "<<computer_<<endl;
}
void CStudent::setName(char * name)
{
name_=name;
}
void CStudent::setId(int id)
{
id_=id;
}
void main()
{
CStudent *grade=new CStudent[3];
//grade={ CStudent(1,"hys",3,3,3), CStudent(2,"szh",1,1,1), CStudent(3,"dyl",2,2,2)};
grade[0]=CStudent(1,"hys",1,3,3);
grade[1]=CStudent(2,"hys",2,3,3);
grade[2]=CStudent(3,"hys",3,3,3);
getRank(grade);
delete []grade;
}
...全文
641 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 kisswawawa 的回复:
int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环
  • 打赏
  • 举报
回复
int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
  • 打赏
  • 举报
回复
楼上高手来了
anshiny 2013-06-01
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
class CStudent{
private:
	int id_,math_,forlan_,computer_;
	char *name_;
public:
	CStudent(int id=0,char *name=" ",int math=0,int forlan=0,int computer=0):id_(id),name_(name),math_(math),forlan_(forlan),computer_ (computer)
	{}
	int getAverage();
	int getTotal();
	void displayInfor();
	void setName(char * name);
	void setId(int id); 
	friend void getRank(CStudent grade[], int size);
	/*{ 
		int i, j;
		CStudent temp;

		for(i=0; i<size-1; i++){
			for(j=i+1; j<size; j++){
				if(grade[i].getTotal() < grade[j].getTotal()){					
					temp = grade[i];
					grade[i] = grade[j];
					grade[j] = temp;
				}
			}
		}

		for(i=0; i<size; i++){
			grade[i].displayInfor();
		}
	}
	*/
};

int CStudent::getAverage(){
	return getTotal() / 3;
}

int CStudent::getTotal(){
	return math_ + forlan_ + computer_; 
}

void CStudent::displayInfor(){
	cout<<"name: "<<name_ <<"    ID: "<<id_<<"    math: "<<math_<<
		"    foreign langue: "<<forlan_<<"    computer: "<<computer_<<endl;
}

void CStudent::setName(char *name){
	name_ = name;
}

void CStudent::setId(int id){
	id_ = id;
}

void getRank(CStudent grade[], int size){ 
	int i, j;
	CStudent temp;
	for(i=0; i<size-1; i++){
		for(j=i+1; j<size; j++){
			if(grade[i].getTotal() < grade[j].getTotal()){					
				temp = grade[i];
				grade[i] = grade[j];
				grade[j] = temp;
			}
		}
	}

	for(i=0; i<size; i++){
		grade[i].displayInfor();
	}
}

void main()
{
	CStudent *grade = new CStudent[3];
	
	grade[0] = CStudent(1,"hys",1,3,3);
	grade[1] = CStudent(2,"hys",2,3,3);
	grade[2] = CStudent(3,"hys",3,3,3);

	getRank(grade, 3);
	delete []grade;
	return;
} 
  • 打赏
  • 举报
回复
friend 应该类里声明 ,在类外实现吧 ,你把friend在类里实现了
ahys 2013-06-01
  • 打赏
  • 举报
回复
引用 2 楼 kisswawawa 的回复:
getRank不能直接调用吧
运行了 可以但是 就是显示不出来
ahys 2013-06-01
  • 打赏
  • 举报
回复
引用 12 楼 kisswawawa 的回复:
[quote=引用 10 楼 oBoySen 的回复:] [quote=引用 8 楼 kisswawawa 的回复:] [quote=引用 7 楼 kisswawawa 的回复:] int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环[/quote]
引用 8 楼 kisswawawa 的回复:
[quote=引用 7 楼 kisswawawa 的回复:] int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环[/quote] 这句话 真有问题 那么 怎么改呢 [/quote] sizeof(grade), grade是指针, 所以等于4啊,不能按你这么用,还是按那位高手的方法吧,把个数传过去,就可以了。我也才学= = [/quote]嗯
  • 打赏
  • 举报
回复
引用 10 楼 oBoySen 的回复:
[quote=引用 8 楼 kisswawawa 的回复:] [quote=引用 7 楼 kisswawawa 的回复:] int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环[/quote]
引用 8 楼 kisswawawa 的回复:
[quote=引用 7 楼 kisswawawa 的回复:] int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环[/quote] 这句话 真有问题 那么 怎么改呢 [/quote] sizeof(grade), grade是指针, 所以等于4啊,不能按你这么用,还是按那位高手的方法吧,把个数传过去,就可以了。我也才学= =
ahys 2013-06-01
  • 打赏
  • 举报
回复
引用 5 楼 anshiny 的回复:
#include<iostream>
using namespace std;
class CStudent{
private:
	int id_,math_,forlan_,computer_;
	char *name_;
public:
	CStudent(int id=0,char *name=" ",int math=0,int forlan=0,int computer=0):id_(id),name_(name),math_(math),forlan_(forlan),computer_ (computer)
	{}
	int getAverage();
	int getTotal();
	void displayInfor();
	void setName(char * name);
	void setId(int id); 
	friend void getRank(CStudent grade[], int size);
	/*{ 
		int i, j;
		CStudent temp;

		for(i=0; i<size-1; i++){
			for(j=i+1; j<size; j++){
				if(grade[i].getTotal() < grade[j].getTotal()){					
					temp = grade[i];
					grade[i] = grade[j];
					grade[j] = temp;
				}
			}
		}

		for(i=0; i<size; i++){
			grade[i].displayInfor();
		}
	}
	*/
};

int CStudent::getAverage(){
	return getTotal() / 3;
}

int CStudent::getTotal(){
	return math_ + forlan_ + computer_; 
}

void CStudent::displayInfor(){
	cout<<"name: "<<name_ <<"    ID: "<<id_<<"    math: "<<math_<<
		"    foreign langue: "<<forlan_<<"    computer: "<<computer_<<endl;
}

void CStudent::setName(char *name){
	name_ = name;
}

void CStudent::setId(int id){
	id_ = id;
}

void getRank(CStudent grade[], int size){ 
	int i, j;
	CStudent temp;
	for(i=0; i<size-1; i++){
		for(j=i+1; j<size; j++){
			if(grade[i].getTotal() < grade[j].getTotal()){					
				temp = grade[i];
				grade[i] = grade[j];
				grade[j] = temp;
			}
		}
	}

	for(i=0; i<size; i++){
		grade[i].displayInfor();
	}
}

void main()
{
	CStudent *grade = new CStudent[3];
	
	grade[0] = CStudent(1,"hys",1,3,3);
	grade[1] = CStudent(2,"hys",2,3,3);
	grade[2] = CStudent(3,"hys",3,3,3);

	getRank(grade, 3);
	delete []grade;
	return;
} 
谢谢 但是 size=sizeof(grade)/sizeof(grade[0]); 这句话 怎么改呢 我写了个 小程序能测试出 这句话的正确性 但在此不行 为啥呢 大神
ahys 2013-06-01
  • 打赏
  • 举报
回复
引用 8 楼 kisswawawa 的回复:
[quote=引用 7 楼 kisswawawa 的回复:] int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环[/quote]
引用 8 楼 kisswawawa 的回复:
[quote=引用 7 楼 kisswawawa 的回复:] int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环[/quote] 这句话 真有问题 那么 怎么改呢
ahys 2013-06-01
  • 打赏
  • 举报
回复
引用 8 楼 kisswawawa 的回复:
[quote=引用 7 楼 kisswawawa 的回复:] int num=sizeof(grade)/sizeof(grade[0]);这个也有错误sizeof(grade)的大小是4
sizeof(grade【0】)大小是20. 4/20=0,所以没循环[/quote]这个没错同学 我试过了还是谢谢你
  • 打赏
  • 举报
回复
getRank不能直接调用吧
ahys 2013-05-31
  • 打赏
  • 举报
回复
我这个 friend 函数触发不了 跪求大婶们 我目前真看不出来 麻烦了
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧