#include <iostream>
int main() {
std::cout << "Hello, World!!" << std::endl;
return 0;
}
iostream : Input Output stream ~= stdio
std : 이름 공간(namespace) :: 표준 라이브러리의 (iostream) 모든 함수, 객체 등 정의
<>
나만의 namespace 를 만들자
"header1.h"
namespace header1 {
int foo();
void bar();
}
header1 namespace 에는 함수2개 정의
#include "header1.h"
#include "header2.h"
namespace header1 {
int func() {
foo(); // 알아서 header1::foo() 가 실행된다.
header2::foo(); // header2::foo() 가 실행된다.
}
} // namespace header1
// header1 안의 foo()는 그냥해도됨
but header2 의 foo()는 namespace에 없으므로 따로 앞에 붙여줘야함
// namespace가 다르다면 같은 함수 이름을 써도됨
using header1::foo;
// foo는 앞으로 header1의 foo만 쓸거야
using namespace header1;
// header1 을 앞으로 계속 namespace로 쓸거야
BUT) std는 쓰지마! 표준은 지켜주자
cout : 표준출력 // stdout " >> "
cin : 표준입력 // stdin " << "
namespace 만 하고 이름을 안붙여주면 // static 과 동일
> 해당 파일 내에서만 접근
// 구글) 변수 이름: 띄어쓰기 > '_' <> 함수 이름 : 띄어쓰기 > 대문자
//switch 문) default :: 케이스 외의 값
Referrnce : ' & '
: 원래 변수와 똑같은 주소를 사용
> 포인터와 달리 별도의 메로리 사용 X
int& another_a = a;
: another_a 의 값에 int 값을 넣음
: another_a 의 값을 넣으면 a의 값도 같이 바뀜
> 한번 정의시 재정의 불가
int& another_a = b;
// 재정의 불가 !
int b=3;
another_a =b;
// 값만 b로 바꿔주는것 > 가능
// another_a = b = 3 = a
// 그냥 referce만 하고 값을 안쓰면 굳이 메모리를 안먹음
>
int& arr[2] = {a, b};
>> 문법적 금지! : 빈공간이니깐
int arr[3][2] = {1, 2, 3, 4, 5, 6};
int (&ref)[3][2] = arr;
>> 이러면 가능
// 참조자의 참조자는 금지!
> int&& : X
int change_val(int &p) {
p = 3;
> 주의 !
( int &p ) 를 인자로 받으면..
int &p = number 로서 reference로 받아옴
<>
( &p ) 는 주소를 받아옴
std::cin >> user_input;
// cin 은 user_input 을 reference ! <> C언어에서 처럼 &로 주소값 보내줄 필요없음
상수 reference
int& ref = 4;
> X // ref=5 , ref=6 > 4를 5로? 5를 6으로 바꿔? > 이상해
>>
const int& ref = 4;
int a= ref;
> a = 4
reference return
int& function() {
int a = 2;
return a;
}
int main()
{
int b= function();
}
:: 반환 > a 의 주소 > local 변수라서 함수 종료시 소멸 (스택 에서 해지)
> static 으로 하면 되긴함
<>
int function(){ } : 값을 반환
+
int& function(int& a) {
a = 5;
return a;
}
int main()
{
int b=2;
int c = funtion(b);
}
> int&a= b = 5 > c =5
1. int& a = b;
> a는 b 의 주소를 사용
2. a=5 > b=5
> int& function(b) = int& a = b = 5
3. c = b의 값 = 5
>> 나중에 큰 영역을 레퍼런스 한번으로 전달할 수 있음