[C++] 자료형(DATA)

2025. 5. 1. 21:04·C++

< 데이터 형변환 >

데이터형을 혼합하여 사용할 때 불일치를 해결하기 위해 자동으로 형변환을 실행함

자동으로 변환되다보니 예상치 못한 결과가 나올 수 있음. 변환규칙에 대해 알아야함.

 

[규칙]

1. 대입 구문에서의 데이터형 변환

2. { }를 사용할 경우의 초기화 변환

3. 수식에서의 데이터형 변환

4. 매개변수를 전달할 때의 형 변환

5. 데이터형 변환자

 

// 데이터형 변환자

int main()
{
    using namespace std;
    
    float tree = 3;     // int형을 float형으로
    int guess = 3.9832; // float형을 int형으로
    int debt = 7.2E12;  // long double을 int형으로
    bool bool_ = 0;     // int형을 bool형으로

    cout << "tree =" << tree << endl;
    cout << "guess =" << guess << endl;
    cout << "debt =" << debt << endl;
    cout << "bool =" << bool_ << endl;
    
    return 0;
}

< auto >

C++은 초기화하는 값을 보고 변수형을 추론하는 기능이 있다.

 

    auto n = 100;     // int형
    auto x = 1.5;     // float형
    auto y = 1.3e12L; // long double형

    cout << typeid(n).name() << endl;
    cout << typeid(x).name() << endl;
    cout << typeid(y).name() << endl;

 

auto로 만든 변수를 초기화하고 데이터형을 조회해보면 이렇게 나온다.

(int라고 나오지 않고 i라고 나오는 이유는 버전차이라고함)

 


* 정수형 크기순

bool < char < signed char < unsigned char < short < unsigned short < int < insigned int < long < unsigned long


< get( ) >

p.144

1. get( )

2. getline( )

둘 다 개행문자까지 읽는 행단위 문자열 입력 함수이다.

 

get( )은 입력큐에 개행문자를 남겨둔다.

그래서 연속 두번 사용하게 되면, 첫번째 호출 후에 개행문자가 남아져있어서

두번째 호출 때는 개행문자를 바로 읽어버리니 아무리 뒤에 내용이 있어도 그냥 끝나버린다.

이를 해결할 수 있는 방법이 있다.

get( )에 빈 괄호를 써주면 입력버퍼안에 하나의 문자를 읽고 없애버린다. (그게 개행이든 뭐든간에)

두번째 호출전에 get( )을 써서 남아있는 개행문자 한개를 없애고 두번째를 호출하면 된다.

cin.get(name, ArSize);
cin.get();              //개행문자 제거
cin.get(age, Arsize);

ㄴ이를 아래와 같이 사용할수도 있다.

// get & get
// cin.get() .get()

cin.get(name, ArSize) .get(); //문자열과 개행을 읽는다.

 

 

getline( )은 개행문자를 폐기한다.

그리고 문자열에 저장할 때 개행문자를 저장하지는 않지만, 대신 널문자를 저장한다.

 

Q. getline은 입력큐에 개행문자도 없애주니까 get은 쓸모없는거 아니야?

A. getline은 사용이 편하고, get은 에러체킹이 더 쉽다는 장점이 있다.


< string 클래스 >

문자열을 배열에 저장하는 대신, 클래스에 저장할 수 있다.

배열보다 훨씬 사용하기 쉽다.

객체 테크닉과 배열 테크닉을 비교하면서 공부해보자.

string클래스를 사용하려면 string 헤더파일을 사용해야한다.

 

char char_1[20];
char char_2[20] = "char";
char_1 = char_2; // 불가능

string str_1;
string str_2 = "string";
str_1 = str_2; // 가능

배열은 배열에 대입할 수 없지만, 객체는 가능하다.

C에서는 strcpy, strcat으로 배열을 복사했다.

 

string str_3;
str_3 = str_1 + str_2;
str_1 _= str_2;

이외에도 결합,연산이 가능하다.

 

    using namespace std;
    string s1 = "dog";
    string s2,s3;

    cout << "현재 s2: " << s2 << endl;
    s2 = s1;
    cout << "s2=s1: " << s2 << " <-string객체는 대입 할수있어요." << endl;
    cout << "s2+s1: " << s2+s1 << " <-string객체는 결합할 수 있어요."<< endl;
    cout << "s1: " << s1 << endl;
    s1 += s2;
    cout << "s1 += s2: " << s1 << endl;
    s1 += s2;
    cout << "s1 += s2(한번 더): " << s1 << endl;

문자열끼리 증가도 되고, 대입도 되고, 연산도 된다!

 

배열과 비교했을 때 가장 큰 차이점은 크기이다.

배열은 크기가 지정되어있는 반면, 객체는 크기가 유동적이다.

 

그래서 배열의 경우, 크기보다 큰 문자열을 저장하려고 할 때 오버밸류가 발생하는데

객체는 필요할 때 크기를 자동으로 조절하기 때문에 위와같은 오류가 없다.

 

'C++' 카테고리의 다른 글

클래스  (0) 2025.05.10
수정해야할 부분  (0) 2025.05.07
'C++' 카테고리의 다른 글
  • 클래스
  • 수정해야할 부분
joo_coding
joo_coding
2025.02.18~
  • joo_coding
    주코딩일지
    joo_coding
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • 일지 (19)
      • 계획표 (7)
      • C언어 (35)
        • 연습장 (12)
      • 과제 (2)
      • C++ (3)
      • python (28)
        • 연습장 (11)
      • TCP IP (4)
      • DB (2)
      • ubuntu (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c언어 #vscode #gcc #윈도우 #c언어윈도우 #gcc윈도우 #vscode윈도우 #c #c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
joo_coding
[C++] 자료형(DATA)
상단으로

티스토리툴바