对象数组、对象指针

今天老弟问了我一道题,是关于对象指针和对象数组的题目,当时竟然有点懵逼,一下子竟不知道这是些什么意思,然后百度查了查资料,现总结如下:

对象数组

顾名思义,对象数组跟数组类似,我们把型于Student s[]={Student("peter",18),Student("Suum",19)};叫做对象数组,切结后面不要忘了
看个例子:

class Date
{
public:
	Date(int year,int month,int day)
		:_year(year)
		,_month(month)
		,_day(day)
	{}
	void Display()
	{
		cout << _year << ":" << _month << ":" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1(2019, 1, 1);
	Date d2[] = { Date(2018,12,12),Date(2018,10,1) };   //注意这里的分号

	d1.Display();

	d2->Display();   //打印对象数组里面各个对象
	(d2 + 1)->Display();
	return 0;
}

对象指针

对象指针就是:指向类的成员的指针。在C++中,可以说明指向类的数据成员和成员函数的指针。
指向数据成员的指针格式如下:
<类型说明符><类名>:: * <指针名>
指向成员函数的指针格式如下:
<类型说明符>(<类名>:: * <指针名>)(<参数表>)
举个栗子:

class Time
{
public:
	  void get_time()
	  {
	  		cout<< hour<<":"<<minute<<":"<<sec<<endl;
	  }
private:
    int hour;
    int minute;
    int sec;
};

int main()
{
	//由于类不是运行时存在的对象。因此,在使用这类指针时,
	//需要首先指定Time类的一个对象,然后,通过对象来引用指针所指向的成员。
    Time *pt;
    Time t1;
    pt = &t1;       ///pt就是指向Time类对象的指针变量
	//运算符 . 是用来对指向类成员的指针来操作该类的对象的。
	//如果使用指向对象的指针来对指向类成员的指针进行操作时,使用运算符->
    (*pt).hour;
    pt->hour;
}

指向对象成员的指针
(1.)指向对象数据成员的指针

int *p;
p = &t1.hour;
cout << *p << endl;    //输出t.hour的值

(2)指向对象成员函数的指针

void(Time::*p2)();//定义p2为指向Time类公用成员的指针变量
p2 = &Time::get_time

最后以一个题终结这篇博客:
题目描述: 建立一个对象数组。内存放10个学生数据(学号、姓名和成绩) .用对象指针指向数组首地址。输出第1.3.5个 学生的数据。
代码如下:

class Student
{
public:
	Student(string name="petter", long long id = 123456789,int score = 88)
		:_name(name)
		,_id(id)
		,_score(score)
	{}
	void Display()
	{
		cout << _name << "," << _id << " , " << _score << endl;
	}
private:
	string _name;
	long long _id;
	int _score;
};

int main()
{
	Student s[10] = {
		Student("s1",16407050521,87),
		Student("s2",16407050522,90),
		Student("s3",16407050523,80),
		Student("s4",16407050524,97),
		Student("s5",16407050525,93),
		Student("s6",16407050526,93),
		Student("s7",16407050527,93),
		Student("s8",16407050528,93),
		Student("s9",16407050529,93),
		Student("s10",16407050530,93),
	};
	Student* pt = s;  //对象指针
	
	pt->Display();
	
	(pt + 2)->Display();
	(pt + 4)->Display();
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值