팀장님이 틈새 C++ 과외해주셨는데 GPT보다 머리에 잘 들어오는 것이다?
*
: 포인터
&
: 참조자
::
: 범위 지정 연산자
std
: 네임 스페이스
.
: 멤버 연산자
이렇게 5개의 개념을 중점으로 설명해주셨다.
&
는 두가지 기능이 있다.
문맥상 기능을 나누는 것이 아니라, 컴파일러 자체가 문법적으로 구분하여 각각 다르게 처리함.
int num = 10; // num이라는 변수를 선언하고 값 10을 저장
int &ref = num; // ref는 num의 참조자 (=별명)
int num = 10;
int *ptr = # // 여기서 &는 변수의 주소를 가져오는 역할
ptr
은 num
의 주소를 저장하는 포인터가 된다.&
는 표현식의 일부로 사용된다. 변수 num
의 주소를 얻는 주소 연산자로 해석된다. int q=0; // 정수형 변수 `q`르 0으로 초기화
int &a=q; //`q`라는 변수의 참조자인 a를 선언. a가 q를 참조한다. a를 수정하면 q가 바뀌고 q를 수정하면 a도 바뀐다.
int *b= &a; // a의 주소를 포인터 b에 저장. b는 a와 q의 주소를 가리킨다.
int c= *b; // b가 가리키는 값을 역참조하여 c에 저장.
b
는 a
의 주소를 가리키고, a
는 q
를 참조하기 때문에 c
는 q
값을 가지게 된다. 결과적으로 c = 0.
int *z=0;
정수형 포인트z
를 nullptr
로 초기화. z
는 아무것도 가리키지 않음.
int **d= &b;
b
의 주소를 저장하는 이중 포인터 d
를 선언.d
는 b
라는 포인터를 가리키는 포인터int ***e = &d; // e는 b라는 포인터를 가리키는 3중 포인터
c= *(*d); // d를 두 번 역참조하여 b가 가리키는 값을 가리킨다. (c=0)
c= *(*(*e)); // e를 세 번 역참조하여 b가 가리키는 값을 가리킨다. (c=0)
namespace std {
extern ostream cout; // cout은 표준 출력 스트림(콘솔 출력)과 연결된 ostream 객체
}
std::cout
: ::
는 std
네임 스페이스에 속한 cout
객체를 명시.
: 객체의 멤버에 접근할 때 사용하는 연산자.
둘을 구분할 때에
#include <iostream>
#include <string>
namespace aaa{
class anda{
public:
void va()
{
}
static va_s()
{
}
}
}
namespace std
{
class anda
{
public:
void va()
{
}
static va_s()
{
}
}
bool getline(std::ifstream *f, std::string & s)
{
int ** d= &b;
int **** e = &d;
c= *(*d);
c= *(*(*e));
f->is_open();
f[0]->is_open();
*f.is_open();
}
}
int main() {
std::ifstream inFile(_T("example.txt"));
anda::va_s()
anda a;
bbb::test()
a.va()
if (inFile.is_open()) {
std::string line;
while (std::getline(&inFile, line)) {
std::cout << line << std::endl;
}
inFile(1);
}
}