对象数组
数组中每一个元素都是同类的对象
如: Student stud[50]; //已声明Student类
若构造函数只有一个参数,则可在定义对象数组时直接为其提供实参:
Student stud[3]={20,30,40};
另外,编译系统只为每个对象元素的构造函数传递一个实参,所以在定义数组时提供的实参个数不能超过数组元素的个数。
若构造函数有多个参数,则在定义数组时为其赋值:
Student stud[3]={
Student{1,2,3},
Student{4,5,6},
Student{7,8,9}
};
对象指针
指向对象的指针
Time *p1; //定义p1为指向Time类的对象的指针变量
Time t1; //定义t1为对象
p1=&t1;
一般形式: 类名 *对象指针名;
而 *p1可实现对t1的调用,借此访问类中成员。
指向对象成员的指针
1.指向对象数据成员的指针
定义: 数据类型名 *指针变量名;
实现调用:
p1=&t1.hour;
cout<<*p1<<endl; //输出t1中hour的值
2.指向对象成员函数的指针
三方面相匹配:a. 函数参数的类型和参数个数
b.函数返回值的类型
c.所属的类
如: vod(Time:: *p2)(); //定义p2为指向Time类中公用成员函数的指针变量
定义指向类中公用成员函数的指针变量的一般形式:
数据类型名类名:: *指针变量名)(参数表列);
调用示例:
p2->get_time(); //调用p2所指对象的get_time函数
p3=&Time:: get_time;
(t1.*p3)(); //调用t1中的get_time()函数
成员函数的入口地址: &类名:: 成员函数名;
也可: void(Time:: p1)()=&Time:: get_time; //在定义p1同时进行其指向的定义
this指针
this指针是隐式使用的,它是作为参数被传递给成员函数的。
将对象a的地址传给形参this指针并按照其指向去引用其他成员。
说明:这些都是由编译系统自动实现的,编程者无需将this增加到形参中,也无需对其指向做出定义。同时也可以显式使用this指针:
return(height*width*length); //隐式
return(this->height*this->width*this->length); //显式
也可以用*this表示当前对象,即:
return((*this).height*(*this).width*(*this).length);
此处不能写为 *this.height; //错误的
公用数据的保护
使得数据在一定范围内可以共享,又保证了数据不被任意篡改,可以使用const定义为常量
常对象
定义时必须赋予初始值:
Time const t1{1,2,3};
在任何场合常对象中所有成员的值均不能被修改。其一般形式:
类名 const 对象名{实参列表};
或
const 类名 对象名{实参列表};
若一个对象被声明为常对象,则不能调用该对象的非const成员函数,否则编译系统报错。
void get_time() const; //将函数声明为const即可调用
get_time()可访问数据成员,但不能修改
也可:
mutable int count;
可使用const的成员函数进行访问修改数据成员的值。
常对象成员
1.常数据成员
如类体:
const int hour;
类体外:
Time:: Time(int h):hour(h);
2.常成员函数
引用本类中的非const类数据成员而不能修改
定义: void get_time() const;