1장 ¶
잘 모르던 용어 정리 ¶
- 인터페이스: 해당 타입의 객체에 사용 가능한 연산(operation)들의 집합
클래스 string ¶
~cpp std::string name1("Rim Youngdong");//생성자. 인자로 받은대로 string객체 초기화 std::string name2(3, '!');//이것도 생성자. 두번째 인자를 첫번째 인자만큼 채워서 string객체를 초기화. 즉 memset()함수와 비슷한 기능 std::string name3=name1+name2+"!";//문자열끼리 더할 수 있음. 단, 문자열 리터럴 2개만을 단독으로 조합할 수 없음. std::string name4="Rim"+"Youngdong";//위에서 설명한 것처럼, 이런 식으로 문자열 리터럴끼리만 더할 수 없음. 에러 출력. std::cout<<name1.size();//strlen()처럼 string객체의 글자수를 리턴하는 함수.
연습문제 ¶
1-1 ¶
- 문제 없음. 설명은 1-2에서.
1-2 ¶
- 1-1과는 달리 처음에 큰 따옴표 안에 들어가 있는 문자열 리터럴을 두 개 더했음. 제일 뒤에 string 인스턴스가 있어서 괜찮을 것 같지만, 결합방식에 있어서 왼쪽 결합 우선이기에 처음엔 "Hello"와 ",world"를 더하게 된다. 그러므로 에러를 출력한다.
1-3 ¶
- 문법적으론 틀린게 없다. {}밖을 빠져나가면, 그 안에서 만들어진 객체나 변수는 다 사라진다. 하여튼, 문자열을 출력하는 프로그램이다.
1-4 ¶
- 이 프로그램도 문법적으로 틀린 것은 없으나 지양해야 할 문법인 듯하다. 끝나지 않은 스코프 내에서 같은 변수명을 선언하면 나중에 헷갈리기 좋을 것 같다. 그리고 }}를 };}로 바꿔도 별 차이는 없다.
1-5 ¶
- x라는 인스턴스는 선언된 괄호 밖을 나가서 사용되었으니 에러를 출력. 이미 소멸되었으며, 맞게 고치려면 7째줄의 괄호를 없애고 그 다음줄에 써야한다.
1-6 ¶
- cin은 공백이나 파일의 끝을 만나면 그때까지의 문자들을 변수에 저장하기 때문에 Samuel Beckett이라고 입력했으면 첫 cin엔 Samuel까지 들어가고, Beckett은 버퍼에 남아있어서 다음의 cin은 사용자에게 입력할 틈도 안 주고 남은 Beckett이란 단어를 flush하기 때문이다.