#1 C++ 객체지향 프로그래밍 기본 개념
1. 메인함수_
c++프로그램의 실행을 시작하는 함수
메인하수가 종료하면 c++프로그램 종료한다.
- void main은 표준이 아니다.
int main(void)가 표준이다.- main()에서
return문 생략가능하다.
2. #include <iostream>
표준 입출력을 위한 클래스와 객체, 변수등이 선언된다.
std::cout<<”Hello\\n”;
std::cin>>width;
2.1 stream
- 데이터의 흐름, 혹은 데이터를 전송하는 소프트웨어 모듈
- 스트림의 양 끝에는 프로그램과 장치연결
- 보낸 순서대로 데이터 전달
- 입출력의 기본단위는 바이트이다.
- c++의 스트림에는 입력스트림과 출력 스트림이 있다,
2.2 입출력 스트림 버퍼
2.2.1 키 입력 스트림의 버퍼
목적
- 입력 장치로부터 입력된 데이터를 프로그램으로 전달하기 전에 일시저장
- 키 입력도중 수정가능
- 백스페이스 키가 입력되면 이전에 입력된 키를 버퍼에서 지운다.
- enter키는 입력의 끝을 의미하고, enter키가 입력된 시점부터 프로그램이 읽기 시작한다.
2.2.2 스크린 출력 스트림 버퍼
목적
- 프로그램에서 출력된 데이터를 출력장치로 보내기전에 일시저장
- 출력장치를 반복적으로 사용하는 비효율성을 개선한다.
- 버퍼가 꽉차거나 강제 출력 명령시에 출력 장치에 출력한다.
2.3 출력객체인 cout이용
std::cout<<”Hello\\n”; 다음과 같이 이용한다.
2.3.1 cout객체
-
헤더파일에 선언되고 std이름 공간에 선언한다.
std::cout으로 이용한다.
2.3.2 «연산자
- 스트림 삽입 연산자이다.
- 여러개의 « 연산자로 여러값을 출력할 수 있다.
std::cout<<”Hello\\n”<<”첫번째 코드이다”;
2.3.3 \n과 endl
'\\n': 줄바꿈만 하므로, 불필요하게 스트림을 플러시하지 않기 때문에 상대적으로 빠르다.
endl: 스트림을 플러시하기 때문에 출력 동작이 추가로 발생한다. 따라서 빈번하게 사용하면 성능이 저하될 수 있다.
요약하자면, '\\n'은 단순히 줄바꿈을 하고, endl은 줄바꿈과 함께 스트림 버퍼를 강제로 출력하게 만든다.
#include <iostream>
int ex01()
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
int main(void)
{
ex01();
return 0;
}
2.3.3 문자열 및 기본 타입의 데이터 출력
#include <iostream>
int ex01()
{
/*문자열 및 기본 타입의 데이터 출력*/
int n = 3;
char c = '#';
std::cout << c << 1000 << '-' << n << "hello" << true << std::endl; // #1000-3hello1
// #은 char / n은 int "hello"은 string / true는 bool이므로 각각 출력됨
// std::endl은 줄바꿈을 의미함
std::cout << "n+5=" << n + 5 << std::endl;
; // n+5=8
/*함수호출도 가능하다.*/
std::cout << ex01(); // Hello, World!
/*출력 형식 조정*/
std::cout << 123;
std::cout.width(10); // 출력 폭을 10으로 설정
std::cout << 123 << std::endl;
// std::cout.setf(ios_base::left); //왼쪽 정렬
// std::cout<< 123;
/*원넓이 계산하는 함수 호출*/
std::cout << f(10.0) << '\\n';
double y = f(10.0);
std::cout << y << std::endl;
}
int main(void)
{
ex01();
return 0;
}
2.4 cin을 이용한 키 입력
2.4.1 »연산자
- 문자열을 입력할때는 빈칸없이 입력해야한다.
연산자는 빈칸이 입력될때까지를 하나의 입력으로 처리하므로 빈칸을 포함한 문자열을 입력받으려면 별도의 방식을 사용해야한다.
2.4.2 enter키를 칠때 변수에 값을 전달한다.
cin은 입력버퍼를 내장하고 있다.
enter키가 입력될때까지 입력된 키를 입력버퍼에 저장한다.
enter가 입력되면 비로소 cin의 버퍼에 키값을 읽어 변수에 전달한다.
2.4.3 cin으로 부터의 키 입력 오류
입력받을 데이터보다 더 큰 데이터나, 자료형이 다른 데이터를 입력받을 경우.
→ 입력버퍼에 쓸데없는 데이터가 남게된다.
해결책
cin 객체 내부상태 초기화, 입력버퍼를 초기화한다.
cin.fail()
cin 오류시 1을 반환하고 아니면 0을 반환한다.
cin.clear()
cin객체의 내부 상태flag를 초기화시켜 cin관련 기능이 정상 작동하도록 한다.
cin.ignore(최대확인글자수, ‘문자’): 입력버퍼 지우기
최대수만큼 버퍼에있는 문자를 지우고, 혹시 ‘문자’가 나타나면 ‘문자’까지 지우고 스톱한다.
2.4.4 변수 정의 위치
c++에서 변수의 정의는 변수가 사용되기 전에만 하면 된다.
2.5 namespace개념
2.5.1 namespace사용
여러명이 서로 나누어 프로젝트를 개발하는경우, 이름 충돌을 해결한다.
개발자가 자신만의 이름 공간을 생성할 수 있도록 한다.
이름공간안에 선언된 이름은 다름 이름공간과 별도로 구분한다.
이름공간::이름

2.5.2 std:: 생략
-
이 통째로 std이름공간 내에 선언 -
헤더파일을 사용하려면 다음코드가 필요하다.
using namespace std;
#include <iostream>
using namespace std;
// namespace함수
namespace KIM
{
float area(float r)
{
return 3.14 * r * r;
}
}
namespace LEE
{
float area(float x)
{
return x * 10;
}
}
int ex0909_2()
{
/*namespace 활용하기*/
float A = KIM::area(5.0); // KIM의 area함수 호출
float B = LEE::area(5.0); // LEE의 area함수 호출
std::cout << A << " / " << B << std::endl;
// using namespace std; 코드로 인하여 std:: 생략 가능
cout << "ByeBye" << endl;
/*cin 연습하기*/
int width; // 너비
int height; // 높이
cout << "space and height>>";
cin >> width >> height;
cout << " space is " << width << endl;
cout << "height is " << height << endl;
return 0;
}
int main(void)
{
ex0909_2();
return 0;
}

2.6 c++문자열
2.6.1 string 클래스 이용하기
- c++의 표준 클라스이다.
C++ Standard Library(C++ 표준 라이브러리) 중 하나인 <string> 헤더를 사용하기 위하여 #include <string>을 사용한다.
string클래스를 이용하여 문자열 다루기
/*#include <string>*/
int ex0909_3(void)
{
int a = 100;
string song1 = "falling in love with you";
string song2("falling in love with you");
cout << song1 << endl; // falling in love with you
cout << song2 << endl; // falling in love with you
string song3 = song2 + "!!!!";
cout << song3 << endl; // falling in love with you!!!!
string name = "KBS";
song3 = song3 + name;
cout << song3 << endl; // falling in love with you!!!!KBS
int index = song3.find("love"); // in이 있는 위치를 찾아줌
cout << index << endl; // 11 (index는 0부터 시작)
return 0;
}
- getline을 이용하여 문자열 입력받기.
getline(cin, cpps)
getline() : 문자열 입력 함수.
이 함수는 cin 객체의 멤버가 아닌 보통함수이다.
cin : cin 객체에게 입력을 부탁한다.
cpps : 문자열을 입력받을 string 객체
/*getlilne 연습*/
int ex0909_4()
{
string singer;
getline(cin, singer); // 공백을 포함한 문자열을 입력받음
cout << singer << endl; // 입력받은 문자열 출력
if (singer == "BTS")
{
cout << "IDOL" << endl;
}
else if (singer == "BTOB")
{
cout << "WOW" << endl;
}
else
{
cout << "What is your favorite song?" << endl;
}
return 0;
}
2.6.2 c-string 방식
-
이나 헤더파일을 include한다. - C언어에서 사용가능한 strcmp(), strlen(), strcpy()를 이용가능하다.
char name[6]; //5개의 문자를 저장할 수 있는 char 배열
cin >> name; //키보드로부터 문자열을 읽어 name배열에 저장한다.

#include <iostream>
using namespace std;
int main() {
cout << "이름을 입력하세요>>";
char name[11]; //한글은 5개 글자, 영문은 10까지 저장할 수 있다.
cin >> name; //키보드로부터 문자열을 읽는다.
cout << "이름은" << name << "입니다\\n"; //이름을 출력한다.
여기서 중요한것은 빈칸을 만나면 입력을 종료한다는 것이다.
→ cin.getline()을 이용한 문자열 입력
cin.getline()을 이용 (공백이 낀 문자열을 입력받는 방법) :
cin.getline(char buf[], int size, char delimitChar)
- buf에 최대 size-1개의 문자 입력. 끝에 ‘\0’ 붙임
- delimitChar를 만나면 입력 중단. 끝에 ‘\0’ 붙임
- delimitChar의 디폴트 값은 ‘\n’(
키)
char address[100];
cin.getline(address,100, '\\n');
//최대 99개의 문자를 읽어 address배열에 저장한다.
//도중에 enter키를 만나면 입력이 중단된다.
댓글남기기