U E D R , A S I H C RSS

Yggdrasil/가속된씨플플/1장

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하기 때문이다.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:29
Processing time 0.0193 sec