对象指针

声明形式

例如:

1
2
3
Clock c(8,3,10);
Clock *ptr;
ptr=&c;

通过指针访问对象成员

通过 ptr 来访问变量c中的内容,可以如下,与C语言一致

1
ptr->getHour()相当于(*ptr).getHour();

对象指针( this 指针 )

1、 ==隐含== 于每一个类的成员函数中的特殊指针
2、 明确的指出成员函数当前所操作的数据所属的对象
例如:Clock 类的getHour 函数中 return Hour=return this Hour
通过类的对象调用public 中的函数的时候,自动的调用this 指针

动态创建对象

new 类型名字 T (初始化参数列表)

功能:在程序执行期间,申请用于存放T 类型的对象的内存空间,并且依次列表赋以初值
结果值:成功:得到T类型的指针,失败:抛出异常

delete 指针p

功能:释放指针p所指向的内存,p必须是new操作的返回值
调用delete 函数,自动调用析构函数
与C语言中malloc 和 free 一致

申请和释放对象数组

1
2
3
4
Point *ptr =new Point[2];//创建对象数组
ptr[0].move(5,10);//通过指针访问数组元素的成员
ptr[1].move(15,20);//通过指针访问数组元素的成员
delete[] ptr;//删除整个对象数组,delete[]!

作业

屏幕截图 2023-01-26 115034.png

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
using namespace std;

class Rectangle {
private:
float width, height;
public:
Rectangle();//无参数构造函数
Rectangle(float width, float height);//声明构造函数
~Rectangle();//析构函数
void Setwidth(float width) {//设置新的宽度
this ->width = width;
}
void Setheight(float height) {//设置新的高度
this->height = height;
}
float getArea(){
return height * width;
}
float getPerimeter() {
return (height + width) * 2;
}
};
Rectangle::Rectangle() {//无参数构造函数使用
this->width = 1.0;
this->height = 1.0;
}
Rectangle::Rectangle(float width, float height) {//有参数构造函数使用
this->width = width;
this->height = height;
}
Rectangle::~Rectangle() {
cout << "The function is over" << endl;
}
int main(void) {
Rectangle rect[3] = { Rectangle(3,4),Rectangle(7,6),Rectangle(5,6) };
for (int i = 0; i < 3; i++) {
cout << "第" << i + 1 << "位成员的周长为长为" << rect[i].getPerimeter() << "面积为:" << rect[i].getArea() << endl;
}
return 0;
}

屏幕截图

屏幕截图 2023-01-26 120404.png