21xrx.com
2025-03-28 00:30:08 Friday
文章检索 我的文章 写文章
C++如何访问私有成员?
2023-06-28 14:12:44 深夜i     19     0
C++ 私有成员 访问

在C++中,类的数据成员可以分为公有成员和私有成员。公有成员能够被外部类函数所访问和使用,而私有成员只能在类内被访问和使用。但是,有时候我们需要在类外访问类的私有成员,这时我们可以使用访问器和友元函数。

访问器是一种特殊的类成员函数,它可以访问和修改私有成员变量,同时还可以进行一定的逻辑判断或变化。访问器有两种,分别是“get”方法和“set”方法。其中,get方法用于得到类的私有成员变量的值,而set方法可以对类的私有成员变量重新赋值。

例如,下面的代码演示了如何使用访问器访问私有成员变量:

#include <iostream>
using namespace std;
class Student{
private:
  int age;
public:
  void setAge(int num)
    age = num;
  
  int getAge()
    return age;
  
};
int main(){
  Student stu;
  stu.setAge(20);
  cout<<"Student age is "<<stu.getAge()<<endl;
  return 0;
}

在上面的代码中,私有成员变量“age”被声明为私有的,因此不能直接访问。但是,通过访问器setAge()和getAge(),我们就可以在类外对私有成员变量进行操作和获取。

除了访问器,友元函数也可以用于访问类的私有成员。友元函数是指在类中声明的非成员函数,它可以访问类的所有成员,包括私有成员。但是,友元函数不属于类的成员函数,因此不能直接访问类的成员变量和成员函数。

友元函数的使用需要在类的声明中使用“friend”关键字进行声明。例如,下面的代码演示了如何使用友元函数访问私有成员变量:

#include <iostream>
using namespace std;
class Student{
private:
  int age;
public:
  Student(int num)
    age = num;
  
  friend void printAge(Student s);
};
void printAge(Student s)
  cout<<"Student age is "<<s.age<<endl;
int main(){
  Student stu(20);
  printAge(stu);
  return 0;
}

在上面的代码中,我们定义了一个printAge()的友元函数,它可以访问类的私有成员变量“age”。在main函数中,我们创建了一个Student类的对象,然后通过printAge()函数输出了该对象的年龄信息。

需要注意的是,友元函数虽然具有访问类的私有成员的能力,但是由于其不属于类的成员函数,因此会影响程序的封装性和安全性。因此,在使用友元函数时一定要慎重考虑。

  
  

评论区