今天老弟问了我一道题,是关于对象指针和对象数组的题目,当时竟然有点懵逼,一下子竟不知道这是些什么意思,然后百度查了查资料,现总结如下:
对象数组
顾名思义,对象数组跟数组类似,我们把型于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;
}