一、对象指针
1、概念:指向对象的指针,简称对象指针。
2、定义格式:
<类名> *<对象指针名> = <初试值>;
eg:Car car1(60); //定义一个对象,车速为60
Car *pc = &car1;//定义对象指针并初始化
二、对象数组
1、概念:数组中存放的是同类型的数据,若存放的数组元素为对象,则为对象数组。
2、定义格式:
<类名> <对象数组名> [数组元素个数]
eg:Car car[5]; //定义含有5个元素的对象数组
Car car1(60);
car[0] = car1;//通过已知对象赋值
car[1] = Car(60);//通过强制类型转换赋值
三、例子:学会使用对象数组和对象指针。
/*****************************************************************
时间:2016年10月3日09:57:24
功能:定义对象数组和对象指针数组,该程序实现了成绩信息的输出以及
任意学生成绩信息的查找
******************************************************************/
#include <iostream>
using namespace std;
class student
{
public:
char name[10];
int math;
int english;
int cplus;
student(char *pn) //构造函数,在声明的时候同时定义了
{
strcpy(name,pn);
math = english = cplus = 0; //数据成员初始化
}
void setscore(int m,int e,int c) //成员函数的声明以及定义
{
math = m;
english = e;
cplus = c;
}
double getmean()
{
return (math + english + cplus)*1.0/3;
}
void print()
{
cout<<name<<"\t"<<math<<"\t"<<english<<"\t"<<cplus;
}
};
void main()
{
student *ps[4]; //定义对象指针数组
student stu[4] = {student("student1"),student("student2"),student("student3"),student("student4")}; //定义对象数组
int i = 0,j = 0;
char *pname[] = {"student1","student2","student3","student4"};
char inname[10];
stu[0].setscore(70,70,70);
ps[0] = &stu[0]; //初始化对象指针数组
stu[1].setscore(80,80,80);
ps[1] = &stu[1];
stu[2].setscore(90,90,90);
ps[2] = &stu[2];
stu[3].setscore(100,100,100);
ps[3] = &stu[3];
cout<<"--------------------------------------------------"<<endl;
cout<<"所有学生的成绩信息如下"<<endl;
cout<<"name"<<"\t\tmath"<<"\tenglish"<<"\tcplus"<<"\tmean"<<endl;
for(i=0;i<4;i++)
{
ps[i]->print();
cout<<"\t"<<ps[i]->getmean()<<endl;
}
cout<<"--------------------------------------------------"<<endl;
cout<<endl;
while(cout<<"请输入您要查找的学生的姓名:" && cin>>inname)
{
if(0 == strcmp(inname,"q"))
{
cout<<"退出成功!"<<endl;
break;
}
for(j=0;j<4;j++)
{
if(0 == strcmp(inname,pname[j]))
{
cout<<inname<<" 该生存在成绩"<<endl;
cout<<"name"<<"\t\tmath"<<"\tenglish"<<"\tcplus"<<"\tmean"<<endl;
ps[j]->print();
cout<<"\t"<<ps[j]->getmean()<<endl;
break;
}
}
if(j>=4)
{
cout<<inname<<" 该生成绩未录入,请核对后重新输入!"<<endl;
}
}
}
/******************************************************************************
这里不能用switch,因为switch 语句及case 的类型表达式必须是整数、字符或枚举量值
switch(inname)
{
case pname[0]: ps[0]->print();break;
case pname[1]: ps[1]->print();break;
case pname[2]: ps[2]->print();break;
case pname[3]: ps[3]->print();break;
default:break;
}
********************************************************************************/