[TCPL] C++ 타입과 선언

The C++ Programming Language

4장 타입과 선언

4.1 타입

4.1.1 C++의 기본 타입

C++는 컴퓨터가 사용하는 기본적인 저장 단위에 대응되는 기본 타입들 그리고 이들 타입을 사용해서 데이터를 담는 방법을 언어 수준에서 지원한다.

타입 이름

형태

bool

True / False

char

문자

‘a’, ‘b’

int

정수

123

Double

부동소수점 실수

123.123

Enum

특정한 집합을 나열

Red, Blue

void

전하는 데이터 없음

 

4.8 나열자 타입

나열자란, 프로그래머가 지정한 값들만 가질 수 있는 타입을 말한다.

<TEXTAREA class=c name=code col=”60″ row=”10″>enum { RED, GREEN, BLUE };</TEXTAREA>

나열자의 원소로 정의된 것들은 정수 상수에 이름을 붙인 꼴이다. (RED = 0, GREEN = 1)

그리고 나열자 타입은 이름도 가질 수 있다.

<TEXTAREA class=c name=code col=”60″ row=”10″>enum color { RED, GREEN, BLUE }; /* RED 의 타입은 color이다.*/ </TEXTAREA>

4.9 선언

C++ 에서 어떤 이름을 이용 하려면 반드시 선언 해야 한다.

<TEXTAREA class=c name=code col=”60″ row=”10″>int a; // int형 변수 a를 선언 </TEXTAREA>

선언문에 있는 이름에 대한 실체들은 어딘가에 정의 해야 한다.

<TEXTAREA class=c name=code col=”60″ row=”10″>int add(int); //int형을 반환하는 add라는 함수를 선언 int add(int c) { return ++c; } //1을 더해 리턴하는 정의 </TEXTAREA>

어떤 정의 중에서는 값이 지정 되는 것들이 있다. 타입/템플릿/함수/상수 이것들은 지정된 후에는 변하지가 않는다. 그러나 비 상수 데이터 타입의 경우에는 초기에 넣어준 값을 바꿀수있다.

<TEXTAREA class=c name=code col=”60″ row=”10″>#include <iostream.h> int main() { int count = 1; //선언과 동시에 1로 정의 const char* name = “apple”; //name은 어떤 문자열을 가리키는 변수 cout<<“n Before ———————–“; cout<< “ncount : “<<count<<“n”<<“name : “<<name; //출력 count=2; //값을 2로 바꾼다. name = “cherry”; //name이 가리키는 곳을 바꾼다. cout<<“nn After ————————-“; cout<< “n”<<“count : “<<count<<“n”<<“name : “<<name<<“n”; //출력 /* 바뀐 값들이 출력 된다.*/ } </TEXTAREA>

4.9.1 선언문의 구조

선언문은 크게 네 부분으로 나뉜다.

지정자 Ex) virtual, extern….

기본 타입 Ex) int, char, double…..

선언자 , 선택적 초기치

4.9.2 이름 여러 개를 선언하는 방법

선언문 한 줄에 여러 개의 이름을 선언하는 것도 가능하다.

<TEXTAREA class=c name=code col=”60″ row=”10″>Int a, b, c, d; //int a, int b, int c, int d </TEXTAREA>


4.9.3 이름에 대하여

이름(식별자)은 글자와 숫자를 모아서 만든다. 다음은 이름을 만들 때 주의 해야 할 점이다

  • 글자로 시작할 것
  • _는 글자로 간주
  • 구별이 잘 가지 않는 형태는 피한다. (0o, l1..)
  • 넒은 유효 범위에 걸쳐 사용 하는 이름의 경우, 뜻이 명확히 전달 되도록 한다
  • 일관성 있는 스타일을 유지 한다.

4.9.4 유효 범위

선언된 이름의 유효 범위에는 지역과 전역이 있다.

지역 이름의 유효 범위는 그 이름이 선언된 위치부터 그 선언을 품고 있는 블록{ }이 끝나는 시점 까지 이다.

전역 이름의 유효 범위는 그 이름이 선언된 위치부터 그 선언을 품고 있는 파일 끝까지 이다.

블록 안에 선언된 이름은 그 블록을 감싸고 있는 블록 혹은 전역 이름을 가린다.

<TEXTAREA class=c name=code col=”60″ row=”10″>#include <iostream.h> int a = 1; //전역 으로 선언 int main ( ) { cout<<” a = “<<a<<“nn”; //전역 a ( 1 ) 출력 int a = 123; //지역 a 선언 cout<<” a = “<<a<<“nn”; //전역 a가 지역a에 가려저 123 출력 { int a =321; //블록안의 지역 a선언 cout<<” a = “<<a<<“nn”; //지역 a가 내부 블록 a에 가려져 321출력 } } </TEXTAREA>

가려진 전역 이름은 범위 지정 연산자 ::로 끌어올 수 있지만 지역 이름은 가려지면 끌어 올 수 있는 방법은 없다.

4.9.5 초기화

어떤 객체에 초기식이 지정되면, 그 객체가 처음 가지게 되는 값은 초기치로 결정 된다.

초기치가 주어지지 않는 경우 전역 객체, 네임스페이스 안의 객체, 지역 정적 객체 (통틀어 정적 객체)들은 그 타입의 0에 해당 하는 값으로 초기화 된다.

<TEXTAREA class=c name=code col=”60″ row=”10″>int b; //b = 0으로 초기화 되었음 </TEXTAREA>

배열 원소 및 구조체의 맴버는 초기화되지 않는다. (정적이냐 아니냐에 상관 없음)

4.9.6 객체와 좌변값

객체(object)란 데이터를 담는 기억장치의 특정한 구역을 가리키며, 객체를 참조하는 표현식이 바로 좌변값(lvalue)이다.

프로그래머가 객체의 특성을 지정해주지 않은 경우, 함수에 선언된 객체는 정의문에서 생성되고 객채의 이름이 유효 범위를 벗어날 때 소멸 된다. 이런 객체를 가리켜 자동 객체라 한다.

4.9.7 Typedef

Typedef는 타입에 대한 새로운 이름을 선언한다.

<TEXTAREA class=c name=code col=”60″ row=”10″>Typedef unsigned short int sint; /*이제부터 sint로 선언하면 unsigned short int 형으로 선언된다. */ </TEXTAREA>


4.11 연습 문제

1. Hello world! 를 출력시켜라

<TEXTAREA class=c name=code col=”60″ row=”10″>#include <iostream.h> int main ( ) { cout<<“Hello, world!”; } </TEXTAREA>

2.

3.
<TEXTAREA class=c name=code col=”60″ row=”10″>#include <iostream.h> int main( ) { int a; //정수형 char b; //문자형 double c; //부동소수점 실수형 int * p; //포인터형 enum color {red, blue, green}; //나열형 cout<<“size of int : “<<sizeof(a)<<“n”; cout<<“size of char : “<<sizeof(b)<<“n”; cout<<“size of double : “<<sizeof(c)<<“n”; cout<<“size of pointer : “<<sizeof(p)<<“n”; cout<<“size of color : “<<sizeof(color)<<“n”; } //각각의 사이즈를 판단해서 출력함 </TEXTAREA>

4.
<TEXTAREA class=c name=code col=”60″ row=”10″>#include <iostream.h> int main( ) { for (int i=’a’; i<‘z’+1 ;++i ) //a 에서 z까지 증가 { cout<<char(i)<<” “<<i<<” “; //i를 char형과 int형으로 출력 } for (int i=’0’; i<‘9’+1 ;++i ) { cout<<char(i)<<” “<<i<<” “; //i를 char형과 int형으로 출력 } }</TEXTAREA>

ik50.pdf

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> 

This site uses Akismet to reduce spam. Learn how your comment data is processed.