C++ study : get, getline, cin, cout, struct, union, enum, new, delete ...
I.T/Programming 2011. 5. 13. 14:42반응형
Chapter 1
1. C는 절차적 언어이며, 하향식이다 (규모큰 것에서 작은 것으로 쪼개나가기)
2. 간결성과 신뢰성, 유지보수가 용이하지만, 규모가 큰 경우 힘들었다.
3. C++은 새로운 데이터형인 class를 이용하여
4. class에 의해 생성되는 데이타구조인 object=객체 를 이요한다.
5. 객체를 표현하는 데이타부분과 데이타를 대상을 수행할수있는 동작부분(메쏘드)으로 나눈다.
6. 객체지향 프로그래밍이란, 객체를 저확하게 서술하는 클래스를 설계하는 것이다.
저수준 -> 고수준 = 상향식 이라한다.
7. 데이타와 메쏘드를 함께 클래스에 정의 가능하며
8. 원시코드를 쉽게 작성하여 수고를 들고, 재사용이 가능
9. 정보를 은닉할 수 있어서 데이타를 보호할 수 있고,
10. 이름이 같아도 재정의가 가능하다 - 오버로딩
11. 상속을 이용하여 새롭게 정의할 수있고
12. C++ 템플릿을 이용하여 특정 테이타형에 국한되지 않는 범용적 설계가 가능한 장점이 있다.
13. 원시코드 - 컴파일러 - 목적코드 - 링커(o)_lib_시동코드 - 실행가능한코드(exe)
Chapter 2
1. #include <iostream> 신식 // #include <iostream.h> 구식
2. using namespace std; : using 지시자를 사용해서 이름공간을 셋팅한다
ex) cout 은 원래 std::cout 임.
3. 매인함수의 return값은 운영체제가 처리하며 쉘스크립트나 배치파일을 설계할 수 있다.
Chapter 3 ~ 4
1. unsigned 변수시에는 음수영역대를 없애서 양수영역대로 늘림
2. const 상수 : 선언할 때 초기화를 같이 해주어야함.
3. #define과 다른점은 데이터형이 명확하고, 특정범위를 설정해서 범위를 제한할 수 있고,
4. 복잡한 데이타형에도 사용이 가능하다.
5. 산술연산은 수학의 순서를 따라감
6. 데이타변환 자동변환 되데, 강제변환은
ex) int(name), (int)name 어떻게 사용해도 가능
7. 배열, int card[4] = {1,2,3,4};
int card[] = {1,5,3,5}; // 원소갯수 = 4 = sizeof card / sizeof (int)
8. 문자열 마지막엔 Null문자가 들어감. char st[] = "abcdef"; - null이 마지막에 알아서 들어감
9. strlen() : 널문자를 제외한 길이를 알려줌
10. cin 은 문자열 끝을 빈칸, 탭, 개행문자와 같은 여백을 간주함. 그리고 null을 넣음.
11. cin.getline 은 엔터에 의해서만 문자열 끝을 간주(개행문자 들어올시 개행문자를 null로 바꿔 저장)
12. cin.getline( 변수명, size ) : size-1 만큼 변수이름에 문자열 저장
13. cin.get( 변수명, size ) : getline과 다르게 개행문자를 그대로 큐에 놔둔다.
14. cin.get( name, 10); or cin 도 마찬가지
cin.get( name2, 10);
-> 두번째 get이 바로 개행문자(첫번째의 ..)를 만나면서 무조건 읽고 끝내버림.
15. cin.get( name, 10);
cin.get(); -> 널문자를 미리 읽게한다.
cin.get( name2, 10);
16. getline , get 에 할당된 길이보다 문자열이 더 길면 나머지 문자들은 입력큐에 그대로 둔다.
failbit를 설정해놓고 더이상 입력받지 않음.
17. cin 도 개행문자를 저장한다.
cin 이후에 바로 getline을 쓰면 입력큐에서 처음에 개행문자를 읽어 Null로 대채해서 저장.
18. struct s_name { // 구조체 템플릿 생성
int a;
int b;
};
s_name name[] = { //s_name name[0], name[1] 선언과 초기화
{10, 20},
{20, 30}
};
19. union n_name{ // 공용체 템플릿 생성, 한시점에 한가지만 사용가능하다.
int a; // 가장큰 멤버의 크기로 공간이 설정되므로 메모리가 절약된다.
long b;
double c;
};
20. enum const를 이용해 기호상수로 가능함.
enum spectrum { a, b ,c ,d ,e ,f ,g }; // 0부터 기호상수가 자동으로 대입됨
enum spectrum { a=1, b, c=10 .. }; // 명시적으로 대입이 가능함. 일부만 명시적이여도 가능.
spectrum Abcd;
Abcd = c; // 열거체 변수에는 해당 열거체의 열거자(멤버)마 대입가능, 산술연산 불가능
int color = d; // int 변수에도 대입할 수있으나, 열거체에 int값을 따로 대입할 순 없다.
d = 12; // 불가능하지만, 데이터형변환을 줘서 가능하게 할 수도있다.
d = Abcd(12); // 가능, 하지만 열거자들 중에 최대값이 12이상이여야 한다. 범위제한
21. int *pt = new int; // int형을 저장할 메모리 할당 // 메모리 동적할당
*pt = 1001; // 값을 메모리에 저장
delete pt; // 메모리 해제, pt가 가리키는 메모리가 해제되지, pt를 못 쓰게 되는건 아니다.
22. int *ps = new int [100]; // int형 배열 동적 할당
delete [] ps; // 배열 해제
23. struct inhlatable{ // 동적할당 구조체 멤버 접근 방법
char name[20];
float volume;
double price;
};
int main(){
inflatable *ps = new inflatable;
cin.get(ps->name, 20); // 멤버 접근 첫번째 방법
.....
cin >> (*ps).volume; // 멤버 접근 두번째 방법
24. 자동공간(auto) : 함수 안에서 정의되는 것들 함수 내부적에만 존재한다.
25. 정적공간(static) : 함수 외부, 내부에서 static 선언. 프로그램 실행동안 지속존재공간.
26. 동적공간(heap) : 메모리 할당과, 해제가 위치에 구애받지 않는다.
※ 5장 연습문제
1. C는 절차적 언어이며, 하향식이다 (규모큰 것에서 작은 것으로 쪼개나가기)
2. 간결성과 신뢰성, 유지보수가 용이하지만, 규모가 큰 경우 힘들었다.
3. C++은 새로운 데이터형인 class를 이용하여
4. class에 의해 생성되는 데이타구조인 object=객체 를 이요한다.
5. 객체를 표현하는 데이타부분과 데이타를 대상을 수행할수있는 동작부분(메쏘드)으로 나눈다.
6. 객체지향 프로그래밍이란, 객체를 저확하게 서술하는 클래스를 설계하는 것이다.
저수준 -> 고수준 = 상향식 이라한다.
7. 데이타와 메쏘드를 함께 클래스에 정의 가능하며
8. 원시코드를 쉽게 작성하여 수고를 들고, 재사용이 가능
9. 정보를 은닉할 수 있어서 데이타를 보호할 수 있고,
10. 이름이 같아도 재정의가 가능하다 - 오버로딩
11. 상속을 이용하여 새롭게 정의할 수있고
12. C++ 템플릿을 이용하여 특정 테이타형에 국한되지 않는 범용적 설계가 가능한 장점이 있다.
13. 원시코드 - 컴파일러 - 목적코드 - 링커(o)_lib_시동코드 - 실행가능한코드(exe)
Chapter 2
1. #include <iostream> 신식 // #include <iostream.h> 구식
2. using namespace std; : using 지시자를 사용해서 이름공간을 셋팅한다
ex) cout 은 원래 std::cout 임.
3. 매인함수의 return값은 운영체제가 처리하며 쉘스크립트나 배치파일을 설계할 수 있다.
Chapter 3 ~ 4
1. unsigned 변수시에는 음수영역대를 없애서 양수영역대로 늘림
2. const 상수 : 선언할 때 초기화를 같이 해주어야함.
3. #define과 다른점은 데이터형이 명확하고, 특정범위를 설정해서 범위를 제한할 수 있고,
4. 복잡한 데이타형에도 사용이 가능하다.
5. 산술연산은 수학의 순서를 따라감
6. 데이타변환 자동변환 되데, 강제변환은
ex) int(name), (int)name 어떻게 사용해도 가능
7. 배열, int card[4] = {1,2,3,4};
int card[] = {1,5,3,5}; // 원소갯수 = 4 = sizeof card / sizeof (int)
8. 문자열 마지막엔 Null문자가 들어감. char st[] = "abcdef"; - null이 마지막에 알아서 들어감
9. strlen() : 널문자를 제외한 길이를 알려줌
10. cin 은 문자열 끝을 빈칸, 탭, 개행문자와 같은 여백을 간주함. 그리고 null을 넣음.
11. cin.getline 은 엔터에 의해서만 문자열 끝을 간주(개행문자 들어올시 개행문자를 null로 바꿔 저장)
12. cin.getline( 변수명, size ) : size-1 만큼 변수이름에 문자열 저장
13. cin.get( 변수명, size ) : getline과 다르게 개행문자를 그대로 큐에 놔둔다.
14. cin.get( name, 10); or cin 도 마찬가지
cin.get( name2, 10);
-> 두번째 get이 바로 개행문자(첫번째의 ..)를 만나면서 무조건 읽고 끝내버림.
15. cin.get( name, 10);
cin.get(); -> 널문자를 미리 읽게한다.
cin.get( name2, 10);
16. getline , get 에 할당된 길이보다 문자열이 더 길면 나머지 문자들은 입력큐에 그대로 둔다.
failbit를 설정해놓고 더이상 입력받지 않음.
17. cin 도 개행문자를 저장한다.
cin 이후에 바로 getline을 쓰면 입력큐에서 처음에 개행문자를 읽어 Null로 대채해서 저장.
18. struct s_name { // 구조체 템플릿 생성
int a;
int b;
};
s_name name[] = { //s_name name[0], name[1] 선언과 초기화
{10, 20},
{20, 30}
};
19. union n_name{ // 공용체 템플릿 생성, 한시점에 한가지만 사용가능하다.
int a; // 가장큰 멤버의 크기로 공간이 설정되므로 메모리가 절약된다.
long b;
double c;
};
20. enum const를 이용해 기호상수로 가능함.
enum spectrum { a, b ,c ,d ,e ,f ,g }; // 0부터 기호상수가 자동으로 대입됨
enum spectrum { a=1, b, c=10 .. }; // 명시적으로 대입이 가능함. 일부만 명시적이여도 가능.
spectrum Abcd;
Abcd = c; // 열거체 변수에는 해당 열거체의 열거자(멤버)마 대입가능, 산술연산 불가능
int color = d; // int 변수에도 대입할 수있으나, 열거체에 int값을 따로 대입할 순 없다.
d = 12; // 불가능하지만, 데이터형변환을 줘서 가능하게 할 수도있다.
d = Abcd(12); // 가능, 하지만 열거자들 중에 최대값이 12이상이여야 한다. 범위제한
21. int *pt = new int; // int형을 저장할 메모리 할당 // 메모리 동적할당
*pt = 1001; // 값을 메모리에 저장
delete pt; // 메모리 해제, pt가 가리키는 메모리가 해제되지, pt를 못 쓰게 되는건 아니다.
22. int *ps = new int [100]; // int형 배열 동적 할당
delete [] ps; // 배열 해제
23. struct inhlatable{ // 동적할당 구조체 멤버 접근 방법
char name[20];
float volume;
double price;
};
int main(){
inflatable *ps = new inflatable;
cin.get(ps->name, 20); // 멤버 접근 첫번째 방법
.....
cin >> (*ps).volume; // 멤버 접근 두번째 방법
24. 자동공간(auto) : 함수 안에서 정의되는 것들 함수 내부적에만 존재한다.
25. 정적공간(static) : 함수 외부, 내부에서 static 선언. 프로그램 실행동안 지속존재공간.
26. 동적공간(heap) : 메모리 할당과, 해제가 위치에 구애받지 않는다.
※ 5장 연습문제
#include <iostream>
#include <cstring>
using namespace std;
struct car{
char name[20];
int year;
};
int main()
{
int count;
cin >> count;
cin.get();
car *pt = new car[count];
for(int i = 0; i < count; i++){
cout << "자동차#" << i+1 << "\n";
cout << "제작업체 : ";
//cin.getline((pt+i)->name, sizeof((pt+i)->name)); //같다.
cin.getline(pt[i].name, sizeof(pt[i].name)); //같다.
cout << "제작년도 : ";
cin >> (pt+i)->year; //cin 사용했으니 get으로 널처리~
cin.get();
}
for(i = 0; i< count ;i ++){
cout << (pt+i)->year << "년도형 " << (pt+i)->name << "\n";
}
delete [] pt;
return 0;
}
#include <cstring>
using namespace std;
struct car{
char name[20];
int year;
};
int main()
{
int count;
cin >> count;
cin.get();
car *pt = new car[count];
for(int i = 0; i < count; i++){
cout << "자동차#" << i+1 << "\n";
cout << "제작업체 : ";
//cin.getline((pt+i)->name, sizeof((pt+i)->name)); //같다.
cin.getline(pt[i].name, sizeof(pt[i].name)); //같다.
cout << "제작년도 : ";
cin >> (pt+i)->year; //cin 사용했으니 get으로 널처리~
cin.get();
}
for(i = 0; i< count ;i ++){
cout << (pt+i)->year << "년도형 " << (pt+i)->name << "\n";
}
delete [] pt;
return 0;
}
반응형
'I.T > Programming' 카테고리의 다른 글
C++ study : cin // cin.get() // cin.getline() 차이점.. 아 짜증 (0) | 2011.05.16 |
---|---|
C++ study : cctype 관련 (0) | 2011.05.16 |
unexpected end of file while looking for precompiled header directive : compile error (0) | 2011.04.21 |
함수오버로딩, 디폴트인자, 함수템플릿 (0) | 2011.04.08 |
함수를 가리키는 포인터변수 (0) | 2011.04.08 |