항목5 에서 일반 생성자는 막았지만 복사 생성자와 복사 대입 연산자를 막지 못한걸 기억하는가? 우리는 "컴파일러가 생성한 복사 함수는 기본 클래스에 대응한 버전을 만들어낸다" 라는 것을 이용하여 복사 생성자와 복사 대입 연산자를 막아보려고한다. 다음 코드를 봐보자 #include #include using namespace std; class UnCopy { private: UnCopy(const UnCopy&); UnCopy& operator=(const UnCopy&); protected: UnCopy() {} ~UnCopy() {} }; class HomeForSale : private UnCopy { private: public: HomeForSale() {} ~HomeForSale() {}; }..
클래스가 비어있지만 어떤 조건을 충족하면 컴파일러는 클래스를 훓고 지나갈 때 클래스에 무언가들을 만들어 낸다 그 무언가는 생성자, 소멸자,복사 생성자, 복사대입연산자 이다. 이들은 모두 public이면서 inline함수이다. 다음 코드를 보면 컴파일러가 무언가를 만들어 버리는 조건을 볼 수 있다. //자동 생성되는 함수들 class Empty { public: Empty() {};//기본 생성자 Empty(const Empty& rhs) {};//복사 생성자 ~Empty() {};//소멸자: 자동으로 생성된 소멸자는 //가상으로 선언이 안되어있다. Empty& operator=(const Empty& rhs) {};//복사 대입 연산자 }; //조건 Empty e1;//기본 생성자, 그리고 //소멸자 E..
c++의 객체(변수)는 자동으로 초기화가 중구난방적으로 하는 것은 아니다 하지만 초기화가 일어나는 조건을 다 알려면 힘들고 실수도 할 수 있기 때문에 일단은 다 초기화 하자 int x = 0;//int의 직접 초기화 const char* text = "A C-style string";//포인터의 직접 초기화 //(항목 3도 참조) double d;//입력 스트림에서 읽음으로써 std::cin >> d;//"초기화" 수행 그리고 초기화와 대입을 헷갈리지 말자 일단은 대입코드의 예시를 보겠다 class PhoneNumber { .... }; class ABEntry// ABEntry = "Address Book Entry" { private: std::string theName; std::string the..
const는 소스코드 수준에서 의미적인 제약을 주어 나의 실수나 컴파일러가 제약을 위반하는 것을 막는데 한 몫 한다 const는 전역 혹은 네임스페이스 유효범위의 상수 선언(정의), 파일, 함수, static으로 선언한 객체에도 붙일 수 있으며 클래스 내부의 경우에는 정적 멤버, 비정적 멤버 모두 가능하다. 그리고 포인터를 상수로도 바꿀 수 있고 포인터가 가리키는 데이터를 상수로 할 수 있다. char *p = greeting//비 상수 포인터 //비 상수 데이터 const char* p = greeting//상 수 데이터 char* const p = greeting//상수 포인터 const char* const p = sreeting//상수 포인터, 상수 데이터 이번에는 반복자(iterator)를 예시..
우리가 아래의 코드를 썼다고 가정해보자 #define ASPECT_RATIO 1.234 이 상태에서 위의 매크로에 의해 오류가 생기면 기호식 이름인 'ASPECT_RATIO'가 아닌 상수 '1.234'가 보이게 된다. 이유는 소스코드가 컴파일러에 가기 전에 전 처리자가 위의 매크로를 상수로 바꾼 후 넘겨버리기 때문에 컴파일러는 컴파일러가 쓰는 기호 테이블에 위의 'ASPECT_RATIO'를 찾을 수 없기 때문이다. 이 문제의 해결법은 매크로 대신 상수를 쓰는 것이다. const double AspectRatio = 1.234; 이 방법을 쓰면 컴파일러가 쓰는 기호 테이블에서 상수 이름(AspectRatio)을 볼 수 있게 되어 오류를 수정하기 쉽게 된다. 추가적으로 컴파일을 거친 후의 최종 코드가 더 작..
www.codeup.kr/problem.php?id=1099 [기초-2차원배열] 성실한 개미 C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 www.codeup.kr #include using namespace std; int main() { int arr[10][10] = { 0, }; for (int i = 0; i > arr[i][j]; int x, y; x = y = 1; while (1) { if (arr[y][x] == 2) { arr[y][x] = 9; break; ..
www.codeup.kr/problem.php?id=1098 [기초-2차원배열] 설탕과자 뽑기 C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 www.codeup.kr #include using namespace std; int main() { int** arr = nullptr; int h, w, n, l, d, x, y; cin >> h>>w;//판의 크기 arr = new int* [h]; for (int i = 0; i < h; i++) arr[i] = new int[w]; for (int i = 0; i < h; i++) { for (int j = ..
www.codeup.kr/problem.php?id=1097 [기초-2차원배열] 바둑알 십자 뒤집기(설명) C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 www.codeup.kr #include using namespace std; int main() { int arr[19][19] = { 0, }; int n,x,y; for (int i = 0; i > arr[i][j]; } } cin >> n; for (int i = 0; i > x >..
www.codeup.kr/problem.php?id=1092 [기초-종합] 함께 문제 푸는 날(설명) C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 www.codeup.kr #include using namespace std; int main() { int a, b, c; cin >> a >> b >> c; int i = 2; for (i = 2; i % a || i % b || i % c; i++) ; cout n; for (int i = 0; i > index1 >> index2; arr[index1][index2] = 1..
www.codeup.kr/problem.php?id=1090 [기초-종합] 수 나열하기2 C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 www.codeup.kr #include using namespace std; int main() { int i; int n; int s[24]={ 0, }; cin >> i; while (i--) { cin >> n; s[n]++; } for (int i = 1; i > r >> n; for (long long int i = a; n != c; i *= r) { if (n == ++c) ..
www.codeup.kr/problem.php?id=1085 [기초-종합] 소리 파일 저장용량 계산하기(설명) 소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다. 마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크해 그 값을 정수값으로 바꾸고, 그 값을 저장해 소리를 www.codeup.kr #include using namespace std; int main() { long long int h, b, c, s,mul; double dev; cin >> h >> b >> c >> s; mul = h * b * c * s; dev = mul / 8;//Byte printf("%.1f MB", ((dev / 1024) / 1024)); } www.codeup.kr/probl..
www.codeup.kr/problem.php?id=1080 [기초-종합] 언제까지 더해야 할까? C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용 www.codeup.kr #include using namespace std; int main() { int a; int i = 0; cin >> a; while (a>0) a -= ++i; cout n >> m; for (int i = 1; i
1~80은 한번에 한번에 묶어서 올리고 나머지는 따로따로 올릴예정!
아 드디어 다 읽었다 기분 너무 좋다. ~~~~~~
드디어 만들었다! 책 안보고 안들어서 그런지 더 성취감이 있네 링크드 리스트를 이용해서 한번 만들어봤는데 어렵더라 ㅇㅇ 에휴... 이제 책 보고 좀 더 제대로된 코드를 보고 내것도 하꿔봐야지 ㅇㅇ 추가로 2번째 문제 올림 이게 데이터와 데이터를 관리하는 클래스가 서로 겹치면 안된다고 그러더라고 그래서 분리해서 주소록 다시 만들라 카더라 그래서 다시 분리해서 만들었어 머리가 나빠서그런지 엄청 헤맸어 이제 3번째 문제인 반복자 구현 이거 풀러 가봐야할거같아 풀다가 너무 졸려서 한숨 자고 일어났더니 기분이 너무 좋네! 이게 마지막 반복자까지 구현하는거야 이제 문제 다 풀었으니 다음 장으로 넘어가야겠어 ㅇㅇ 홀가분하다 ㅎㅎㅎ 다음페이지를 넘겨보니 번외가 있길래 "하....이거 풀어야 하나 말아야 하나" 고민하다..
잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림잘림..