728x90 반응형 C++/기초(두들낙서)37 [C++] 묵시적 형변환 형변환의 종류는 두가지이다. 묵시적 형변환과 암시적 형변환이 있다. 생성자가 형변환도 담당하나요? i1,i2,i3까지는 납득이 되는 코드이다. 다만 i3=3밑부터 납득이 가지 않는다. 출력을 해보면 생성자가 5개나 호출된 것을 확인할 수 있는데 우선 i4부터 보자. int형인 4를 Item으로 형변환을 시켰더니 생성자가 호출되었다. 이때 이 Item(int num) 생성자를 변환생성자라고 본다. 비슷한 맥락으로 i3=3;을 이해해볼 수 있다. 3이 i3가 될 수 있을까를 고민할때 변환생성자가 있으니 바꿔줄 수 있다! 3을 Item객체로 바꿔주는 과정에서 변환생성자를 통해 임시객체가 생기고, 임시객체에 있는 3이라는 값이 i3로 얕은복사가 된다. (이동 생성자) 그래서 i3=3; 을 묵시적 변환 Item .. 2022. 7. 10. [C++] 이동 시맨틱 이전까지는 얕은 복사의 문제점을 가지고 깊은 복사를 진행했다면 이번에는 의도적으로 얕은복사를 해볼 것이다. 깊은 복사또한 단점이 있다. strData를 전부 새로 할당한다음에 원본 객체에 있는 문자열을 하나하나 복사한다. 근데 만약에 길이가 길어지면 / 또는 객체의 크기가 커지면 많은 양의 연산을 수행해야한다. 임시객체와 깊은 복사 이 예시를 보면 분명 s5=getName();을 할때만 복사 대입연산자가 실행되면서 깊은복사가 일어날 것이라 추론할 수 있지만 실제로는 복사생성자도 호출되면서 깊은복사가 2번 일어나게 된다. (벌써 비효율이 느껴진다..🚨🚨) 복사생성자가 왜 호출되는지 알기 위해서는 임시객체를 알아야 한다. 우선 getName()이 리턴되면서 소멸자가 호출된다. 문제는 a=getName();을.. 2022. 7. 10. [C++] 분할 컴파일/ 분할 컴파일 참조변수도 값이기에 값에서 멤버변수로 접근할 때는 "."을 사용한다. 이걸 분할 컴파일 해보면 분할 컴파일의 장점은 코드의 재사용성을 높일 수 있다는 것이다. 주의할점이 있다면 헤더 파일을 여러파일에 포함시킬 때, 반드시 한 한번만 포함시켜야 한다. 컴파일러가 한 파일을 여러번 포함시키는 것을 막기 위해 #ifndef #endif 을 사용한다. 지금은 struct.h라는 헤더파일 하나만 있지만 예를 들어 new.h라는 헤더파일이 있는데 얘가 struct.h를 받아온다고 해보자. 그리고 main.cpp에서 struct.h랑 new.h를 받아오면 똑같은 코드를 두번 보는 것이기에 한 파일을 두번 포함시키는 꼴이 되어 에러가 뜬다. 이때 struct.h에 #ifndef 와 #endif 를 걸어주면.. 2022. 7. 5. [C++] 함수와 구조체 / 함수 포인터 / 참조변수 함수와 구조체 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 struct Time { int hours; int mins; }; Time sum(Time*, Time*); void showTime(Time); Time sum(Time* t1, Time* t2) { Time total; //주소에 대해서 접근(포인터에 대해서 접근할 때는 ) -> //값에 대해서 접근할때는 . total.mins = (t1->mins + t1->mins) % 60; total.hours = t1->hours + t2->hours + (t1->mins + t2->mins) / 60; return total; } void show.. 2022. 7. 5. 이전 1 2 3 4 5 6 ··· 10 다음 728x90 반응형