21xrx.com
2024-12-22 22:34:32 Sunday
登录
文章检索 我的文章 写文章
如何在C++中访问私有成员?
2023-07-07 11:37:21 深夜i     --     --
C++ 私有成员 访问

在C++中,私有成员是不允许被直接访问的,这是出于封装性的考虑。但在某些场合下,我们可能需要访问私有成员,那么该怎么办呢?下面就介绍几种实现方式。

1. 友元函数

友元函数是类的友好,相当于将该函数声明为该类的友元函数后,该函数就可以访问该类的私有成员了。


class A {

private:

  int a;

  friend void printA(A obj);

}

void printA(A obj)

  std::cout << obj.a << std::endl;

int main() {

  A obj;

  obj.a = 10; // error

  printA(obj); // output: 10

  return 0;

}

2. 友元类

与友元函数类似,友元类也可以访问该类的私有成员。将需要访问该类的私有成员的类声明为该类的友元类即可。


class A

private:

  int a;

  friend class B;

class B {

public:

  void printA(A obj)

    std::cout << obj.a << std::endl;

  

}

int main() {

  A obj;

  obj.a = 10; // error

  B b;

  b.printA(obj); // output: 10

  return 0;

}

3. 成员函数

成员函数可以访问该类的私有成员,因为成员函数属于该类的实例,可以通过类的实例访问私有成员。


class A {

private:

  int a;

public:

  void printA()

    std::cout << a << std::endl;

  

}

int main() {

  A obj;

  obj.a = 10; // error

  obj.printA(); // output: 10

  return 0;

}

4. getter和setter函数

getter和setter函数一般用于对私有成员进行读写操作,通过setter函数修改私有成员,通过getter函数获取私有成员。


class A {

private:

  int a;

public:

  void setA(int x)

    a = x;

  

  int getA()

    return a;

  

}

int main() {

  A obj;

  obj.setA(10);

  std::cout << obj.getA() << std::endl; // output: 10

  return 0;

}

以上就是几种在C++中访问私有成员的方式,但要注意,过多地违反封装性可能会导致程序难以维护和扩展,应在必要的情况下谨慎使用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复