
指向C++ 类成员的指针
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本文探讨了在C++中如何正确使用指向类成员的指针。通过实例解析其语法与应用技巧,帮助读者掌握这一语言特性。
在C++编程语言中,指针是一种强大的工具,不仅可以指向普通变量和函数,还可以指向类的成员(包括数据成员和成员函数)。本段落将深入探讨“指向类成员的指针”,这对于理解和实现面向对象编程非常重要。
我们首先来看指向非静态类成员的指针:
1. **指向类成员函数的指针**
- 这种类型的指针除了需要匹配函数参数列表及返回值类型外,还需要与所属的具体类相匹配。这是因为成员函数依赖于`this`指针来访问对象的数据。
- 声明:使用`typedef`关键字定义一个指向特定成员函数的指针,格式为 `typedef 返回值 (类名::*指针类型)(参数列表);`
- 赋值:通过取地址的方式获得成员函数的地址,如 `指针类型 指针名称 = &类名::成员函数;`
- 使用:对于对象实例使用`.`操作符(`对象.*指针`);而对于指向对象的指针则需要使用`->*`操作符 (`对象指针->*指针)`。
示例代码:
```cpp
class A {
public:
void NonStaticFunc(int arg) { /*...*/ }
private:
int nonStaticMember;
};
typedef void (A::*NONSTATICFUNCPTR)(int);
int main() {
NONSTATICFUNCPTR funcPtr = &A::NonStaticFunc;
A a;
(a.*funcPtr)(10); // 对象调用
A *aPtr = new A;
(aPtr->*funcPtr)(10); // 指针调用
}
```
2. **指向类数据成员的指针**
- 这种类型的指针用于访问对象的数据成员,无需考虑`this`指针。
- 声明和使用方式与上述函数指针类似。
示例代码:
```cpp
class A {
public:
A(int arg) : nonStaticMember(arg) {}
int nonStaticMember;
};
typedef int (A::*NONSTATICDATAPTR);
int main() {
NONSTATICDATAPTR dataPtr = &A::nonStaticMember;
A a(10);
cout << a.*dataPtr; // 对象引用
A *aPtr = new A(100);
cout << aPtr->*dataPtr; // 指针引用
}
```
接下来是针对静态成员的指针:
- **静态成员**属于类,而不是特定的对象实例。因此它们不需要`this`指针。
- 对于**静态成员函数**,其指针与普通非成员函数完全相同,因为这些方法不依赖任何具体对象。
- 静态数据成员则通过普通的指针访问。
例如:
```cpp
class A {
public:
static int StaticFunc() { return staticMember; }
static const int staticMember = 10;
};
typedef const int *STATICDATAPTR;
typedef int (*STATICFUNCPTR)();
int main() {
STATICDATAPTR dataPtr = &A::staticMember;
STATICFUNCPTR funcPtr = &A::StaticFunc;
cout << *dataPtr; // 直接引用
cout << funcPtr(); // 直接调用
}
```
总结,C++中的指向类成员的指针提供了间接访问和操作类数据与方法的功能。这不仅增强了程序设计灵活性,也加深了对面向对象编程的理解。
全部评论 (0)


