C++에서 개인 변수에 액세스

Anam Javed 2023년10월12일
  1. C++에서 개인 변수에 액세스
  2. 멤버 함수를 사용하여 C++에서 개인 변수에 액세스
  3. friend 함수를 사용하여 C++에서 개인 변수에 액세스
  4. 포인터를 사용하여 C++의 개인 변수에 액세스
  5. 결론
C++에서 개인 변수에 액세스

이 문서에서는 C++ 개인 변수와 C++에서 변수에 액세스하는 방법에 대해 설명합니다.

C++에서 개인 변수에 액세스

캡슐화는 권한이 없는 사용자로부터 중요하고 필수적인 데이터를 보호합니다. private 키워드는 이 현상을 달성하는 데 사용됩니다.

캡슐화와 함께 데이터 은닉 개념도 C++에서 구현됩니다. C++에서 private 키워드로 선언된 변수는 해당 클래스의 멤버 함수에서만 액세스할 수 있음을 나타냅니다.

어떤 개체나 함수도 직접 액세스할 수 없습니다.

#include <iostream>
using namespace std;

class shape {
 private:
  double r;

 public:
  void area(double rr) {
    r = rr;

    double ar = 3.14 * r * r;

    cout << "Radius is: " << r << endl;
    cout << "Area is: " << ar;
  }
};

int main() {
  shape obj;
  obj.area(1.5);

  return 0;
}

출력:

Radius is: 1.5
Area is: 7.065

friend 함수 또는 클래스의 멤버 함수 외에 어떤 엔터티도 클래스의 개인 데이터 멤버에 액세스할 수 없습니다. 여기서 변수 rarea() 클래스의 멤버 함수에 의해 액세스됩니다.

area() 함수는 클래스의 개인 데이터 멤버에 액세스하여 원의 면적을 계산합니다. 그리고 클래스의 객체는 클래스의 메인 함수에서 생성됩니다.

이 개체를 통해 클래스 멤버 함수에 액세스하고 원의 면적을 계산합니다.

friend 기능만으로는 개인 데이터 멤버에 액세스할 수 없습니다. 그 외에도 포인터를 사용하여 클래스 외부에서 private 변수에 액세스할 수도 있습니다.

개인 데이터 멤버에 액세스하기 위해 포인터를 사용하는 이 방법은 C++의 허점입니다. 자세히 알아보려면 함께 읽으십시오.

멤버 함수를 사용하여 C++에서 개인 변수에 액세스

C++의 private 멤버 변수 또는 함수는 클래스 외부에서 액세스하거나 볼 수 없습니다. C++의 주요 개념은 데이터 보안이라는 고유한 기능입니다.

개인 데이터 멤버는 생성된 클래스와 해당 클래스의 friend 함수에서만 액세스할 수 있습니다.

클래스의 멤버 함수가 데이터 멤버에 액세스하는 방법을 알아보려면 아래 예제에 중점을 둡니다.

#include <iostream>
using namespace std;

class Emp {
 private:
  int sal;

 public:
  void setSal(int s) { sal = s; }

  int getSal() { return sal; }
};

int main() {
  Emp myObj;
  myObj.setSal(50000);
  cout << myObj.getSal();
  return 0;
}

출력:

50000

위 프로그램에서 emp 클래스에는 private 및 public 멤버가 모두 있습니다. salsetSal()getSal()이라는 두 가지 클래스 멤버 함수가 액세스할 수 있는 개인 변수입니다.

setSal()은 개인 데이터 멤버 sal의 값을 초기화하고 getSal()은 개인 데이터 멤버 sal의 값을 반환합니다. 마지막으로 메인 메소드에서 클래스의 객체를 생성합니다.

myObj 객체는 setSal() 클래스의 멤버 함수에 액세스하여 개인 데이터 멤버 sal에 값을 전달합니다. 마침내 클래스 객체는 getSal()에 액세스하여 sal 데이터 멤버를 반환합니다.

기본적으로 클래스의 모든 구성원은 비공개입니다. 예를 들어 다음 클래스에서 w는 비공개 멤버입니다. 따라서 구성원을 공개 또는 보호됨으로 레이블을 지정할 때까지 개인 데이터 구성원으로 간주됩니다.

class B {
  double w;

 public:
  double len;
  void setW(double wid);
  double get(void);
};

실시간으로 private 영역에 데이터를 정의하고 public 영역에 멤버 함수를 정의하여 다음 프로그램과 같이 클래스 외부에서 호출합니다.

#include <iostream>

using namespace std;

class B {
 public:
  double len;
  void setW(double wid);
  double getW(void);

 private:
  double w;
};

double B::getW(void) { return w; }

void B::setW(double wid) { w = wid; }

int main() {
  B box;

  box.len = 10.0;
  cout << "Length: " << box.len << endl;

  box.setW(10.0);
  cout << "Width: " << box.getW() << endl;

  return 0;
}

위 프로그램에서 B 클래스에는 private 및 public 멤버가 모두 있습니다. 여기서 wsetW()getW()라는 두 가지 클래스 멤버 함수가 액세스할 수 있는 개인 변수입니다.

setW()는 개인 데이터 멤버 w의 값을 초기화하고 getW()는 개인 데이터 멤버 w의 값을 반환합니다. 개체 상자는 클래스의 멤버 함수에 액세스합니다.

공개 변수 len은 개체 상자를 통해 액세스할 수 있으며 값으로 초기화됩니다. setW()는 주어진 값을 개인 데이터 멤버 w에 할당합니다.

마지막으로 클래스 개체 상자는 getW()에 액세스하여 w 데이터 멤버를 반환합니다.

출력:

Length: 10
Width: 10

friend 함수를 사용하여 C++에서 개인 변수에 액세스

friend 함수는 클래스의 private 또는 public 부분에 있습니다. 객체를 사용하지 않고 일반 멤버 함수라고 할 수 있습니다.

클래스 개체는 클래스 범위 내에 있지 않으므로 호출하지 않습니다. 또한 클래스의 private 및 protected 데이터 멤버에 직접 액세스할 수 없습니다.

friend 함수는 클래스의 개체를 사용하고 점 연산자를 사용하여 멤버에 액세스합니다. 전역 함수이거나 다른 클래스의 멤버일 수 있습니다.

#include <iostream>
using namespace std;

class Dist {
 private:
  int m;

  friend int add(Dist);

 public:
  Dist() : m(0) {}
};

int add(Dist d) {
  d.m += 5;
  return d.m;
}

int main() {
  Dist D;
  cout << "Distance: " << add(D);
  return 0;
}

출력:

Distance = 5

위의 프로그램에서 m 비공개 멤버가 있는 Dist 클래스를 볼 수 있습니다. m 값을 초기화하는 공개 생성자가 있습니다.

그런 다음 m을 사용하여 거리를 계산하는 friend 함수 add()가 있습니다. add()는 클래스 범위 내에 있지 않은 friend 함수입니다.

메인 메소드에서 클래스의 객체가 생성되고 add() 함수가 전달됩니다. add() 함수는 거리를 계산하고 결과를 표시합니다.

C++의 friend 클래스

friend 클래스는 생성할 수 있는 friend 함수와 같습니다. friend 클래스는 친구인 클래스의 비밀 및 보호된 구성원에 액세스할 수 있습니다.

friend 기능과 유사하게 friend 클래스가 있습니다. friend인 private 및 protected 클래스 구성원에 액세스할 수 있습니다.

통사론:

class X {
  Data members;
  Member Functions;

  friend class Y;
};

class B {
  ……..
};

구문에서 볼 수 있듯이 X 클래스는 Y 클래스의 friend입니다. 이것은 Y 클래스가 X 클래스의 private 및 protected 멤버에 액세스할 수 있음을 의미합니다.

그러나 이 우정은 상호적이지 않으며 X 클래스는 Y 클래스의 비공개 및 보호된 구성원에 액세스할 수 없습니다. X 클래스를 Y 클래스의 friend로 지정해야 합니다.

또한 우정은 상속되지 않으므로 Y 클래스는 X 클래스의 자식 클래스의 friend가 아닙니다.

C++의 friend 클래스의 예

#include <iostream>
#include <string>
using namespace std;
class Ar {
  int len, br, arr;

 public:
  Ar(int l, int b) {
    len = l;
    br = b;
  };

  void computeArea() { arr = len * br; }

  friend class prClass;
};
class prClass {
 public:
  void prAr(Ar &a) { cout << "Area = " << a.arr; }
};
int main() {
  Ar a(20, 10);
  a.computeArea();
  prClass p;
  p.prAr(a);

  return 0;
}

출력:

Area = 200

위의 프로그램에는 두 개의 클래스가 있습니다. Ar 클래스는 lenbr 변수를 사용하여 면적을 계산합니다.

이 클래스에는 arr, lenbr의 세 가지 개인 데이터 멤버가 있습니다. 생성된 다른 클래스는 prClassAr 클래스의 computeArea 멤버 함수에 의해 계산된 최종 영역을 인쇄합니다.

모든 데이터 멤버가 비공개이므로 결과를 인쇄하려면 prClassAr 클래스에 대한 friend로 만들어야 합니다. 클래스 Ar 객체는 메인 함수 내부에 생성됩니다.

면적 계산이 완료되고 Ar 클래스의 개체가 prClass 함수로 전달됩니다. 이 기능을 prAr이라고 하며 영역을 표시합니다.

C++에서 개인 변수에 접근하기 위해 friend 함수를 사용하는 것의 단점

C++의 가장 중요한 기능은 캡슐화, 즉 데이터와 함수의 그룹화입니다. 데이터 멤버와 멤버 함수는 외부 함수나 클래스가 데이터에 액세스할 수 없도록 데이터에 대해 함께 작동합니다.

캡슐화 기능은 friend 함수 또는 클래스가 다른 클래스의 private 멤버에 액세스할 수 있도록 허용되어 손상되었습니다. 데이터 보안이 위험합니다.

포인터를 사용하여 C++의 개인 변수에 액세스

포인터는 friend나 클래스 멤버 함수 없이 데이터에 액세스합니다.

#include <bits/stdc++.h>
using namespace std;

class Hello {
 private:
  int c;
  int d;
};

int main() {
  Hello a;
  int* q = (int*)&a;
  *q = 4;
  q++;
  *q = 5;
  q--;
  cout << endl << "c = " << *q;
  q++;
  cout << endl << "d = " << *q;
  return 0;
}

출력:

c = 4
d = 5

위 프로그램에서 aHello 클래스의 객체입니다. 클래스 객체 a 주소는 타입캐스팅을 통해 정수 포인터 q에 할당됩니다.

포인터 q는 개인 구성원 c를 가리킵니다. 정수 값은 *q, 즉 c에 할당됩니다.

그런 다음 객체 a의 주소가 증가하고 메모리 위치 값 5에 액세스하여 d에 할당됩니다. q-- 문은 c의 메모리 위치를 설정합니다.

cout 문을 사용하여 c가 표시됩니다.

결론

이 기사에서 우리는 C++에서 개인 변수에 접근하는 것에 대해 논의했습니다. 우리는 C++에서 private 멤버에 접근하는 다양한 방법에 대해 배웠습니다.

또한 많은 예제를 통해 C++에서 friend 함수와 포인터의 개념에 대해 논의했습니다. 한 가지 중요한 점은 멤버 함수도 private인 클래스에서 객체를 생성할 수 없다는 것입니다.

이 점을 염두에 두고 이 기사를 즐겁게 읽으셨기를 바랍니다. 더 많은 정보를 제공하는 기사를 계속 지켜봐 주십시오.