类和对象的基础8——对象指针和对象数组

一、对象指针

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;
	}
	********************************************************************************/

	

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路漫求索_CUMT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值