본문 바로가기

언어/C++12

(C++)타입변환 연산자 오버로딩 연산자 오버로딩 중에 해당 클래스의 타입을 변환시킬 수 있는 오버로딩이 있다. 해당 객체와 다른 타입의 객체에 대입연산자를 사용할때 해당 대입연산자를 정의할 수 있다. class Strings { char ST[128]; public: Strings(const char* st) { strcpy_s(ST, sizeof(ST),st); } operator const char*() { return ST; } }; int main() { Strings s("Hello"); const char* a = s; printf("%s", a); } 위의 코드에서 Strings s는 생성자를 통해 "Hello"란 글자를 ST라는 지역변수에 넣는다. 그리고 operator 타입() 연산이 나오는데 이렇게 쓰면 해당 객체를 .. 2020. 7. 2.
(C++)연산자 오버로딩의 활용 class Point { int x; int y; public: Point(int _x=0, int _y=0) :x(_x), y(_y) {} void print() const { cout 2020. 6. 29.
(C++)VS에서 함수에서 지역변수의 레퍼런스값 리턴시 접근할수 있는 이유 int& Rf() { int a1 = 3; int& A1 = a1; printf("%d", A1); return A1; } int main() { int& a=Rf(); a = 3; printf("%d", a); } 위의 코드와 같이 Rf함수에서 지역변수의 참조인 A1을 리턴하여 main함수에서의 참조자a에 저장하였다. 원래대로라면 지역변수 A1이 가리키는 a1은 함수 Rf의 스코프가 종료될때 해제되고 접근이 불가능해야 정상일것이다. 하지만 위의 코드는 잘 동작한다. a를 바꾸는것은 물론이고 main과 Rf에서의 변수의 주소값이 동일하게 나온다. 왜 이것이 가능한지 나는 궁금했고 결과적으로 말하면 정확한 원인은 밝혀내지 못했다. 하지만 조사했던 부분을 한번 포스팅해보고자 한다. int& Rf() { in.. 2020. 6. 29.
(C++)함수에서의 const 사용 C++에서 자주 사용하는 키워드인 const. 함수에서는 어떤 경우에 사용하는지 알아보자. 1. 함수 선언 시 뒤에 붙은 const class Test { int k; void NonConstFunc() { k=3; } void Func() const { //k=3 -> 에러발생 //NonConstFunc() -> 에러발생 }; }; 함수 뒤에 붙은 const는 해당 함수가 속해있는 클래스의 멤버변수를 바꾸지 않겠다는 의미이다. 또한 멤버변수를 바꾸는 또다른 함수를 호출하는것 또한 막아놓았다. 2. 함수 선언시 앞에 붙은 const class Test { int k; public: Test(); const int Func() { k = 3; return k; }; const int& RefFunc(int.. 2020. 6. 29.