C++类的友元函数与指向成员的指针

需积分: 35 0 下载量 50 浏览量 更新于2024-08-24 收藏 1.05MB PPT 举报
"指向类成员的指针及友元函数-C++编程概念" 在C++中,类的成员包括数据成员和成员函数。有时我们需要直接通过指针来操作这些成员,这时就需要使用到指向类成员的指针。这种特殊类型的指针能够指向类中的数据成员或成员函数,提供了一种灵活的访问方式。 1. 指向类中数据成员的指针变量 定义一个指向类中数据成员的指针变量,其语法如下: ```cpp <类型> 类名::* 指针变量名; ``` 这里的`类型`是指针所指向的数据成员的类型,而`类名`是包含这个数据成员的类的名称。例如,如果有一个名为`Person`的类,它有一个`int`类型的成员`age`,那么我们可以这样定义一个指向`age`的指针变量: ```cpp int Person::* ptrToAge; ``` 然后,我们可以通过对象和指针来访问数据成员,例如: ```cpp Person p; p.age = 30; // 直接访问 *(ptrToAge = &p.age) = 30; // 通过指针访问 ``` 2. 友元函数 C++中的友元机制是为了打破封装性,允许非成员函数访问类的私有和保护成员。友元函数是一种不在类的成员列表内的函数,但它被声明为某个类的友元,从而具有访问该类私有和保护成员的权限。 友元函数的声明通常在类的定义内部,使用`friend`关键字,如下所示: ```cpp class MyClass { private: int myData; public: MyClass(int data): myData(data) {} friend int accessPrivate(MyClass& obj); // 声明友元函数 }; int accessPrivate(MyClass& obj) { return obj.myData; // 友元函数可以直接访问myData } ``` 友元函数与普通函数的主要区别在于: - 友元函数不是类的成员,不具有`this`指针,因此需要通过对象或对象引用作为参数来访问成员。 - 友元函数可以在类的内部声明,但其定义可以放在类的外部。 - 友元函数可以访问类的所有成员,无论它们的访问级别如何,而普通函数只能访问公有成员。 在使用友元函数时要注意,虽然它们提供了便利,但过度使用会破坏类的封装性,可能影响代码的维护性和安全性。因此,应谨慎地使用友元机制,仅在确实需要时才引入友元函数。