一、对象数组
1、概念
对象数组本质上就是:数组中每一个元素都是同一个类的对象。
//定义对象数组(装有3个对象的数组)
Box aa[3]={
Box(1, 1, 1), //对三个对象分别定义,并初始化构造函数(传入参数)
Box(2, 2, 2),
Box(3, 3, 3)
};
2、练习代码
#include <iostream>
using namespace std;
//声明一个类为Box
class Box
{
public:
//声明带有默认参数的构造函数,该构造函数给私有成员赋值
Box(int h=10, int w=12, int len=15): height(h), width(w), length(len){ }
int Volume(); //声明一个计算体积的函数
private:
int height;
int width;
int length;
};
//对共有成员函数进行定义
int Box::Volume()
{
return(height * width * length); //返回计算的体积
}
int main()
{
//定义对象数组(装有3个对象的数组)
Box aa[3]={
Box(1, 1, 1), //对三个对象分别定义,并初始化构造函数(传入参数)
Box(2, 2, 2),
Box(3, 3, 3)
};
cout << "对象盒子1的体积为:" << aa[0].Volume() << endl; //调用对象数组中对象1的Volume函数
cout << "对象盒子2的体积为:" << aa[1].Volume() << endl; //调用对象数组中对象2Volume函数
cout << "对象盒子3的体积为:" << aa[2].Volume() << endl; //调用对象数组中对象3的Volume函数
}
二、对象指针
1、概念
对象指针本质上就是:指向对象成员的指针。
这个对象存储空间的起始地址就是对象的指针,可以定义一个指针变量,用来存放对象的地址,这就是指向对象的指针变量。
2、对象指针的用法规则
- 定义指向对象的指针形式:
类名 *对象指针名;
定义指向数据成员的指针:对象指针名*成员名;
//假如已经定义了一个Time类,则对象指针的使用如下:
Time *pt;//定义pt 为指向Time类对像的指针变量
Time t1;//定义t1为Time类对像
pt= &t1;//将t1的起始地址赋给pt
void (*p)(); //p是指向函数的指针的指针变量
-
指向成员函数的指针变量的定义
(1)数据类型名 (类名::*指针变量名)();
(2)使指针变量指向一个公用成员函数的一般形式为:指针变量名=&类名::成员函数名;
即为,该指针指向成员函数的首地址。 -
注意:对象指针在使用之前,也一定要先进行初始化,让它指向一个已经声明过的对象,然后再使用。通过对象指针,可以访问到所指向对象的公有成员。
3、对象指针访问成员数据和成员函数
//*p为已经定义的Time类对象指针
(*pt).hour //pt所指向的对象中的hour成员,即t1.hour
// pt把指向的对象中的get_time函数,即t1.get_time()
pt->get_time() //方法1
(*pt).get_time() //方法2
4、对象指针练习代码
#include <iostream>
using namespace std;
//定义类Time
class Time
{
public:
Time(int, int, int); //声明构造函数
int hour; //声明3个共有变量
int minute;
int sec;
void show_time(); //声明共有成员函数
};
//定义类Time的构造函数
Time::Time(int h, int m, int s)
{
hour= h; //用传入的参数来对共有成员数据进行初始化
minute= m;
sec= s;
}
//定义共有成员函数
void Time::show_time()
{
cout << hour << ":" << minute << ":" << sec << endl;
}
int main()
{
Time t1(12, 23, 34); //由Time类实例化对象t1
int *p1= &t1.hour; //定义指向整型数据的指针p1,指向t1对象的共有成员数据hour
cout << "指针p1指向地址中存有:" << *p1 << endl; //输出p1指向地址中存放的数据
t1.show_time(); //调用对象t1的共有成员函数
//对象指针
Time *p2= &t1; //定义对象指针p2,指向对象t1的首地址
p2->show_time(); //调用指针p2指向对象地址的成员函数
//对象函数指针:指向对象函数的指针
void(Time::*p3)(); //定义指向Time类共有成员函数的指针变量p3
p3= &Time::show_time; //使p3指向Time类共有成员函数show_time,不能加括号,否则就是调用了
(t1.*p3)(); //调用对象t1中p3所指的成员函数,即t1.show_time()
return 0;
}