C++에서 개인 변수에 액세스
- C++에서 개인 변수에 액세스
- 멤버 함수를 사용하여 C++에서 개인 변수에 액세스
-
friend
함수를 사용하여 C++에서 개인 변수에 액세스 - 포인터를 사용하여 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
함수 또는 클래스의 멤버 함수 외에 어떤 엔터티도 클래스의 개인 데이터 멤버에 액세스할 수 없습니다. 여기서 변수 r
은 area()
클래스의 멤버 함수에 의해 액세스됩니다.
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 멤버가 모두 있습니다. sal
은 setSal()
및 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 멤버가 모두 있습니다. 여기서 w
는 setW()
및 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
클래스는 len
및 br
변수를 사용하여 면적을 계산합니다.
이 클래스에는 arr
, len
및 br
의 세 가지 개인 데이터 멤버가 있습니다. 생성된 다른 클래스는 prClass
로 Ar
클래스의 computeArea
멤버 함수에 의해 계산된 최종 영역을 인쇄합니다.
모든 데이터 멤버가 비공개이므로 결과를 인쇄하려면 prClass
를 Ar
클래스에 대한 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
위 프로그램에서 a
는 Hello
클래스의 객체입니다. 클래스 객체 a
주소는 타입캐스팅을 통해 정수 포인터 q
에 할당됩니다.
포인터 q
는 개인 구성원 c
를 가리킵니다. 정수 값은 *q
, 즉 c
에 할당됩니다.
그런 다음 객체 a
의 주소가 증가하고 메모리 위치 값 5에 액세스하여 d
에 할당됩니다. q--
문은 c
의 메모리 위치를 설정합니다.
cout
문을 사용하여 c
가 표시됩니다.
결론
이 기사에서 우리는 C++에서 개인 변수에 접근하는 것에 대해 논의했습니다. 우리는 C++에서 private 멤버에 접근하는 다양한 방법에 대해 배웠습니다.
또한 많은 예제를 통해 C++에서 friend
함수와 포인터의 개념에 대해 논의했습니다. 한 가지 중요한 점은 멤버 함수도 private인 클래스에서 객체를 생성할 수 없다는 것입니다.
이 점을 염두에 두고 이 기사를 즐겁게 읽으셨기를 바랍니다. 더 많은 정보를 제공하는 기사를 계속 지켜봐 주십시오.