?
目录
C++中的this指针是一个特殊的指针,它指向当前对象的地址。在类中的成员函数中,this指针可以用来访问当前对象的成员变量和成员函数。
当我们调用一个对象的成员函数时,编译器会自动将当前对象的地址作为参数传递给该函数,并将其存储在一个名为this的隐式参数中。在函数内部,我们可以通过this指针来访问该对象的成员变量和成员函数。
this指针是一个指向当前对象的常量指针,它存储了当前对象的地址。通过this指针,我们可以在成员函数内部访问和操作当前对象的成员变量和成员函数。
例如,考虑下面这个简单的Point类:
class Point {
public:
void set(int x, int y);
void print();
private:
int m_x;
int m_y;
};
在类中定义了set和print两个成员函数,set函数用于设置点的坐标,print函数用于打印点的坐标。
void Point::set(int x, int y) {
this->m_x = x; // 使用this指针访问成员变量m_x,相当于(*this).m_x = x;
this->m_y = y; // 使用this指针访问成员变量m_y,相当于(*this).m_y = y;
}
void Point::print() {
cout << "Point(" << this->m_x << ", " << this->m_y << ")" << endl;
}
在set函数中,通过this指针来访问和赋值成员变量m_x和m_y,因为成员变量和this指针在同一个对象的内存空间中。
在print函数中,通过this指针来访问成员变量m_x和m_y,并将其打印出来。
使用示例代码:
int main() {
Point p;
p.set(3, 5);
p.print();
return 0;
}
输出结果:
Point(3, 5)
在main函数中,首先创建了一个Point对象p。然后调用set函数设置p的坐标为(3, 5),最后调用print函数打印出p的坐标。
需要注意的是,即使没有显示地使用this指针,编译器在调用成员函数时也会隐式地传递当前对象的地址给该成员函数。因此,在成员函数内部可以直接访问成员变量,而不需要使用this指针。但是,为了明确代码的可读性,建议在成员函数中使用this指针来显式地表示操作的是当前对象的成员变量。
假设我们有一个Rectangle(矩形)类,其中包含矩形的宽度和高度。我们想要实现一个成员函数,用于计算矩形的面积,并将结果保存在矩形对象中。
#include <iostream>
using namespace std;
class Rectangle {
public:
void setDimensions(int width, int height);
void calculateArea();
void printArea();
private:
int m_width;
int m_height;
int m_area;
};
void Rectangle::setDimensions(int width, int height) {
this->m_width = width; // 使用this指针访问成员变量m_width
this->m_height = height; // 使用this指针访问成员变量m_height
}
void Rectangle::calculateArea() {
this->m_area = this->m_width * this->m_height; // 使用this指针访问成员变量m_width和m_height,并计算面积
}
void Rectangle::printArea() {
cout << "The area of the rectangle is: " << this->m_area << endl; // 使用this指针访问成员变量m_area,并打印面积
}
int main() {
Rectangle rect;
rect.setDimensions(5, 3);
rect.calculateArea();
rect.printArea();
return 0;
}
在上面的示例中,我们定义了Rectangle类,其中包含了setDimensions、calculateArea和printArea三个成员函数。
setDimensions函数用于设置矩形的宽度和高度,通过this指针访问成员变量m_width和m_height来保存传入的参数。
calculateArea函数用于计算矩形的面积,通过this指针访问成员变量m_width和m_height,并将计算结果保存在成员变量m_area中。
printArea函数用于打印矩形的面积,通过this指针访问成员变量m_area并进行打印。
在主函数main中,我们创建了一个Rectangle对象rect,并依次调用setDimensions、calculateArea和printArea函数,在控制台输出矩形的面积。
运行上述代码,输出结果应为:
The area of the rectangle is: 15
这个案例展示了如何使用this指针在成员函数中访问和操作当前对象的成员变量。通过使用this指针,我们可以清晰地表达出我们要对当前对象进行操作。
对象数组是指具有相同类类型的多个对象的集合,这些对象可以按照数组的方式进行管理和操作。
在C++中,我们可以使用类名作为类型名来定义对象数组。例如,如果我们有一个Rectangle(矩形)类,那么我们可以使用以下方式定义包含10个矩形对象的对象数组:
Rectangle rectangles[10];
在定义对象数组时,我们需要指定数组的大小。上面的示例中,我们指定了数组的大小为10,即包含10个矩形对象。
当我们需要对对象数组中的每个对象执行相同的操作时,可以使用循环遍历数组,并依次调用每个对象的成员函数。例如,如果我们需要计算每个矩形的面积并打印结果,可以使用以下代码:
for (int i = 0; i < 10; i++) {
rectangles[i].calculateArea();
rectangles[i].printArea();
}
上述代码使用for循环遍历rectangles数组中的每个矩形对象,依次调用每个对象的calculateArea和printArea函数,从而计算并打印每个矩形的面积。
需要注意的是,在对象数组中创建的多个对象都是独立的,它们各自拥有自己的成员变量和成员函数。因此,我们可以分别设置每个对象的属性,并对每个对象执行不同的操作。
对象数组是一种非常方便的数据结构,可以用于管理和操作多个相似的对象。例如,在游戏开发中,我们可以使用对象数组来管理游戏中的角色、道具和怪物等对象。
当我们需要创建多个对象,并且这些对象具有相同的类类型和成员函数,可以使用对象数组来管理和操作这些对象。
下面是一个示例,展示了如何创建对象数组并对其进行操作:
#include <iostream>
using namespace std;
class Rectangle {
public:
void setDimensions(int width, int height);
void calculateArea();
void printArea();
private:
int m_width;
int m_height;
int m_area;
};
void Rectangle::setDimensions(int width, int height) {
m_width = width;
m_height = height;
}
void Rectangle::calculateArea() {
m_area = m_width * m_height;
}
void Rectangle::printArea() {
cout << "The area of the rectangle is: " << m_area << endl;
}
int main() {
const int numOfRectangles = 3;
Rectangle rectangles[numOfRectangles];
// 设置每个矩形的尺寸
rectangles[0].setDimensions(5, 3);
rectangles[1].setDimensions(4, 6);
rectangles[2].setDimensions(7, 2);
// 计算并打印每个矩形的面积
for (int i = 0; i < numOfRectangles; i++) {
rectangles[i].calculateArea();
rectangles[i].printArea();
}
return 0;
}
在上面的示例中,我们定义了Rectangle类,其中包含了setDimensions、calculateArea和printArea三个成员函数,用于设置矩形的尺寸、计算矩形的面积以及打印矩形的面积。
在主函数main中,我们首先定义了一个常量numOfRectangles来表示矩形对象数组的大小,然后创建了一个名为rectangles的Rectangle类型对象数组,其中包含了numOfRectangles个矩形对象。
接下来,我们使用对象数组的索引来分别设置每个矩形的尺寸。
然后,通过循环遍历对象数组,依次调用calculateArea和printArea函数,并打印每个矩形的面积。
运行上述代码,输出结果应为:
The area of the rectangle is: 15
The area of the rectangle is: 24
The area of the rectangle is: 14
这个示例展示了如何使用对象数组来管理和操作多个对象。你可以根据需要调整numOfRectangles的值来创建不同数量的矩形对象。
这段代码定义了一个名为Rectangle的类,用于表示矩形对象。它具有三个公有成员函数:setDimensions、calculateArea和printArea,以及三个私有成员变量:m_width、m_height和m_area。
- setDimensions函数用于设置矩形的宽度和高度。
- calculateArea函数用于计算矩形的面积,即将宽度和高度相乘,并将结果保存在m_area成员变量中。
- printArea函数用于打印矩形的面积。
在主函数main中:
- 声明了一个常量numOfRectangles,用于表示矩形对象数组的大小。
- 创建了一个名为rectangles的Rectangle类型对象数组,其中包含了numOfRectangles个矩形对象。
- 使用对象数组的索引来分别设置每个矩形的尺寸。
- 通过循环遍历对象数组,依次调用calculateArea和printArea函数,并打印每个矩形的面积。
可以根据需要修改numOfRectangles的值来创建不同数量的矩形对象,并设置不同的尺寸。运行代码后,会输出每个矩形的面积。
这段代码示例展示了如何使用对象数组来管理和操作多个矩形对象。通过定义类和成员函数,我们可以对每个矩形对象进行独立的操作,而对象数组提供了一种便捷的方式来组织多个对象。