当前位置:编程学习 > C/C++ >>

C++类的对象数组赋值问题

//CStudent.h
class CStudent   //学生类
{
private:
 int ID;   //学生ID
 char *pName; //学生姓名
 float fScore; //学生成绩
public:
 CStudent(){};
 CStudent(int ID,char *pName,float fScore);
 CStudent(CStudent &s);
 ~CStudent();
 void SetID(int ID);
 int GetID();
 void SetName(char *pName);
 char *GetName();
 void SetScore(float fScore);
 float GetScore();
 void Show(); //显示学生信息
};

//CStudent.cpp
#include <iostream>
#include "CStudent.h"
#include "string.h"
using namespace std;
CStudent::CStudent(int ID, char *pName, float fScore)
{
 this->ID=ID;
 this->pName= new char[20];
 strcpy(this->pName,pName);
 this->fScore=fScore;
}
CStudent::CStudent(CStudent &s)
{
 ID=s.ID;
 pName=new char[20];
 strcpy(pName,s.pName);
 fScore=s.fScore;
}
void CStudent::SetID(int ID)
{
 this->ID=ID;
}
int CStudent::GetID()
{
 return ID;
}
void CStudent::SetName(char *pName)
{
 this->pName=new char[20];
 strcpy(this->pName,pName);
}
char *CStudent::GetName()
{
 return pName;
}
void CStudent::SetScore(float fScore)
{
 this->fScore=fScore;
}
float CStudent::GetScore()
{
 return fScore;
}
void CStudent::Show()
{
 cout<<ID;
 cout<<pName;
 cout<<fScore;
 cout<<endl;
}
CStudent::~CStudent()
{
  delete []pName;
}

//main.cpp
#include <iostream>
#include "CStudent.h"
#include "string.h"
using namespace std;
void main()
{
 CStudent Cs[4];    //如何在上面的基础上给这个对象数组赋值,然后定义一个排序函数,按成绩的升序来排序,然后输出?

}

追问:这样我知道是可以,也可以用直接调用我重载的那个构造函数;

CStudent Cs[4];

CStudent Cs[0]=new CStudent(1,"李一",85);

CStudent Cs[1]=new CStudent(2,"王二",95);

...................................................................

如果用这种方法,要释放这些new吗?如何释放?谢谢

答案:void main()
{
 CStudent Cs[4]={
  CStudent(1,"张三",80),
  CStudent(2,"李四",75),
  CStudent(3,"王五",95),
  CStudent(4,"小六",62)
 };  //这样就可以赋初值.也可以使用成员函数一个个设置.如下:
/* Cs[0].SetID(1);
 Cs[0].SetName("张三");
 Cs[0].SetScore(80);

 Cs[1].SetID(2);
 Cs[1].SetName("李四");
 Cs[1].SetScore(75);

 Cs[2].SetID(3);
 Cs[2].SetName("王五");
 Cs[2].SetScore(95);

 Cs[3].SetID(4);
 Cs[3].SetName("小六");
 Cs[3].SetScore(62);
*/
 Sort(Cs);
 for(int i=0; i<4; i++)
 {
  Cs[i].Show();
 }

}
//选择排序

void Sort(CStudent Cs[4])
{
 int i,j,k;
 CStudent t;
 for(i=0; i<3; i++)
 {
  k = i;
  for(j=i+1;j<4;j++)
  {
   if(Cs[k].GetScore()>Cs[j].GetScore())
   {
    k = j;
   }
  }
  if(k != i)
  {
   t = Cs[k];//这里涉及到对象的交换,而对象里又有指针型成员,所以要重载=运算符.
   Cs[k] = Cs[i];
   Cs[i] = t;
  }
 }
}

//重载了=运算符

CStudent &CStudent::operator=(const CStudent cs)
{
 if(this != &cs)
 {
  ID=cs.ID;
  pName=new char[20];
  strcpy(pName,cs.pName);
  fScore=cs.fScore;
 }
 return *this;
}

#include <iostream>
#include "CStudent.h"
#include "string.h"

using namespace std;

void PaiXu( ?CStudent* p )

{

? ? for ( int i = 0; i < 4; ++i )

? ? {

? ? ? ?int minIndex = i;

? ? ? ?for ( int j = i + 1; j < 4; ++j )

? ? ? ?{

? ? ? ? ? ? if ( p[ j ].GetScore() < p[ minIndex ].GetScore() )?

? ? ? ? ? ? {

? ? ? ? ? ? ? ? ?minindex = j;

? ? ? ? ? ? }

? ? ? ?}

? ? ? ?CStudent tmp = p[ i ];

? ? ? ?p[ i ] = p[ minindex ];

? ? ? ?p[ minindex ] = temp;

? ? }

}

void main()
{

?CStudent Cs[4];

?for ( int i = 0; i < 4; ++i ) ? // 循环用来写入值

?{

? ? ?Cs[ i ].SetID( i );

? ? ?Cs[ i ].SetName( "张三" );

? ? ?Cs[ 1 ].SetScore( i * 10 );

?}

?PaiXu( ?Cs ); ?// 排序

?

?for ( int i = 0; i < 4; ++i ) ? // 循环用来写入输出值

?{

? ? ?Cs[ i ].Show();

?}?


}

我没有调试和,排序方法很多 ?我随便写了个!呵呵


上一个:c/c++链表程序编写
下一个:怎么学习C和C++语言

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,