C++函数指针、对象指针、this指针以及指向类静态和非静态成员的指针是C++语言中常用的指针类型。这些指针类型的使用可以让我们更加灵活地实现一些复杂的功能和设计模式。下面我们会逐一讲解它们的使用。
函数指针
函数指针是指向函数的指针类型。函数指针可以用于实现回调函数、函数指针数组等功能。函数指针的通用形式为:返回值类型(*函数指针变量名)(参数列表)。
例如,我们定义一个函数指针类型func_ptr,指向一个返回值为int,有两个int型参数的函数:
typedef int(*func_ptr)(int, int);
以上的代码定义了一个名为func_ptr的函数指针类型,用typedef定义。
示例:使用函数指针调用函数
#include<iostream>
using namespace std;
int add(int a, int b)
{
return a + b;
}
int main()
{
int(*func_p)(int, int) = &add; //定义函数指针并初始化
int res = func_p(3, 5); //调用函数指针
cout << res << endl; //输出计算结果
return 0;
}
以上的代码定义了一个add()函数,它的作用是计算两个整数之和;然后定义了一个函数指针func_p,指向add()函数。最后,我们通过函数指针调用add()函数,计算两个整数之和并输出。
对象指针和this指针
对象指针指向类的实例对象。如果一个成员函数被调用时是通过类的实例对象来调用的,那么在成员函数内部,该对象的指针就被隐式地传递给了函数。在C++中,称这一指针为this指针。
示例:使用对象指针和this指针访问成员函数
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age) { m_age = age; }
void display() { cout << "Age: " << m_age << endl; }
private:
int m_age;
};
int main()
{
Person p(20); //定义并初始化Person对象
Person* p_p = &p; //定义Person对象指针
p.display(); //通过对象调用成员函数
p_p->display(); //通过对象指针调用成员函数
return 0;
}
以上的代码定义了一个Person类,并在该类中定义了一个成员函数display(),它的作用是输出Person对象的年龄。在main()函数中,定义了一个Person对象p,并使用对象p访问了成员函数display()。接着,我们定义了一个Person对象指针p_p,并通过它访问了成员函数display()。需要注意的是,在成员函数display()内部,使用的隐含的指针是this指针,它指向调用该函数的Person对象。
静态成员指针和非静态成员指针
非静态成员指针指向类的非静态成员变量或函数,而静态成员指针则指向类的静态成员变量或函数。
示例:使用静态成员指针和非静态成员指针访问成员变量
#include<iostream>
using namespace std;
class Person
{
public:
static int m_age_static;
int m_age;
void display() { cout << "Age: " << m_age << ", static Age: " << m_age_static << endl; }
};
int Person::m_age_static = 10;
int main()
{
Person p;
p.m_age = 20;
int Person::*p_age = &Person::m_age; //定义非静态成员指针
int* p_age_static = &Person::m_age_static;//定义静态成员指针
p.display(); //输出成员变量
p.*p_age = 25; //通过非静态成员指针修改值
*p_age_static = 30; //通过静态成员指针修改值
p.display(); //输出修改后的成员变量
return 0;
}
以上的代码定义了一个Person类,并在该类中定义了一个静态成员变量m_age_static和一个非静态成员变量m_age,还有一个成员函数display()用于输出成员变量的值。在main()函数中,我们首先创建了一个Person对象p,并将m_age的值设置为20。接着,我们定义了一个非静态成员指针p_age,指向m_age成员变量。我们还定义了一个静态成员指针p_age_static,指向m_age_static静态成员变量。最后,通过非静态成员指针p_age和静态成员指针p_age_static分别修改了成员变量的值,并通过对象p调用display函数输出了修改后的值。
总之,C++函数指针、对象指针、this指针、以及静态和非静态成员指针都是很重要的指针类型,它们的使用技巧对于C++程序的设计和实现具有重要意义。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针 - Python技术站