C/C++ 기초 강의 요약 (섹션7)
이제 C++로 들어왔다.
모든 프로그래밍 언어를 처음 시작할때 출력해보는 Hello, World!를 출력해보았다.
<출력>
#include <iostream>
int main(){
std::cout<<"Hello, World!"<<std::endl;
}
#include <iostream>
using namespace std;
int main(){
cout<<"Hello, World!"<<endl;
}
위의 두 코드는 같은 값을 출력한다. using namespace std 는 std라는 이름공간을 사용할 것이니 굳이 명시하지 않아도 되도록 해주는 문장이다. 그래서 밑의 출력 부분에서도 cout과 endl 앞에 std::를 붙여줬던 앞의 코드와 달리 cout, endl만으로 같은 기능을 하게 된다.
<입력>
#include <iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a<<b<<endl;
}
cout을 썻던 출력과 달리 cin으로 입력을 받는다. 출력때와 달리 <<의 방향도 반대인 >>!! 중요하다!.
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
str="Hello";
cout<<str<<endl;
}
char str[]혹은 char *str과 같이 문자열을 정의했던 c언어와 달리 c++에서는 훨씬 쉽게 string str;이라고 정의를 하고 마음대로 문자열을 대입시켜도 된다! 엄청나게 쉬워진거같다.
#include <iostream>
#include <string>
using namespace std;
int main(){
string name;
cout<<"이름 입력 : ";
cin>>name;
string message="안녕하세요, "+ name + "님";
cout<<message<<endl;
}
strcat과 같이 따로 정의된 문자열 함수를 사용해 문자열을 이어붙였어야 했던 c언어와 달리 c++은 +기호로 더 직관적이고 쉽게 문자열을 이어붙일 수 있다!
#include <iostream>
using namespace std;
int main(){
int a(10); //int a=10;
int b(a);
}
int a=10과 같은 의미로 쓰이는게 c++에서는 int a(10)이 있다. 초기화를 할때 변수 이름 뒤 괄호 안에 값을 넣으면 그 값으로 초기화가 된다.
#include <iostream>
using namespace std;
int main(){
int arr[10]={3,1,4,1,5,9,2,6,5,3};
for(int n:arr){
cout<<n<<endl;
}
}
c++에서는 신기한 for문을 사용할 수 있다. 위의 코드와 같이 for(int n:arr)은 n이라는 변수에 arr[0]부터 arr[10]까지 차례대로 하나씩 대입시킨다. 그 결과 위 코드를 실행해보면 3 1 4 1 5 9 2 6 5 3이 출력된다.
#include <iostream>
void swap(int &a, int &b){
int tmp=a;
a=b;
b=tmp;
}
void swapd(double &a, double &b){
double tmp=a;
a=b;
b=tmp;
}
void swapp(int*(&a), int*(&b)){
int *tmp=a;
a=b;
b=tmp;
}
int main(){
int a =20,b=30;
double da=2.222,db=3.333;
int *pa=&a, *pb=&b;
swap(a,b);
swapd(da,db);
swapp(pa,pb);
}
이전에 구현했던 swap함수를 인자가 double, 포인터 형일때 버전으로 만들어보았다. double 버전은 int와 다 똑같아서 괜찮았는데, 포인터형은 인자부분에서 굉장히 어려웠다. 인자 선언에서 a라는 레퍼런스 변수를 가리키는 포인터가 들어온다로 이해하면 될거같다. 인자로 줄때는 pa,pb로 준다.
오버로드 위의 함수에서 각 데이터형마다 swap, swapd,swapp등과 같이 중복이 되지 않으려고 이렇게 정의해놨다. 하지만 모두 이름을 swap으로 해도 결과는 같게 나온다. 그 이유는 함수가 호출될때 주어진 인자의 데이터형을 컴파일러가 보고 데이터형이 맞는 함수를 찾아 알아서 실행시켜주기 때문이다.
#include <iostream>
using namespace std;
int inventory[64]={0};
int score=0;
void getItem(int itemId){
inventory[itemId]++;
}
void getItem(int itemId, int cnt){
inventory[itemId]+=cnt;
}
void getItem(int itemId, int cnt, int sc){
inventory[itemId]+=cnt;
score+=sc;
}
int main(){
getItem(6,5);
getItem(3,2);
getItem(3);
getItem(11,34,7000);
printf("%d\n", score);
for(int i=0;i<16;i++){
cout<<inventory[i]<<endl;
}
}
오버로드를 활영한 게임 속 아이템, 점수를 입력받아 할당되어 있는 배열과 변수에 더하게 되는 코드다. 여기서 default 값 설정을 할 수 있다. 위를 보면
오버로드로 함수 3개를 정의해놨다. 저 3개의 함수를 다 지우고 이 함수 하나로 대체가 가능하다.
void getItem(int itemId, int cnt=1, int sc=0){
inventory[itemId]+=cnt;
score+=sc;
}
뚜렷한 차이가 보인다. 인자 중괄호 안을 보면 cnt와 sc 변수에 각각 =1, =0이 붙어있다. 이는 cnt나 sc에 해당되는 인자가 입력되지 않았을 시에 각각 1과 0으로 설정하겠다, 즉 기본값을 설정하겠다는 의미이다.
<종합문제>
//아름과 점수를 입력받고, 다음과 같이 출력되는 프로그램을 작성해보세요.
#include <iostream>
#include <string>
using namespace std;
int main(void){
string name;
int score;
cout<<"이름 입력 : ";
cin>>name;
cout<<"점수 입력 : ";
cin>>score;
cout<<name<<"님의 점수는 "<<score<<"점입니다.";
}
//범위 기반 for문을 사용하여 이차원 배열을 출력해 보세요.
#include <iostream>
using namespace std;
int main(void){
int arr[2][3]={{1,2,3},{4,5,6}};
for(int(&ln)[3]:arr){
for(int &col:ln){
cout<<col<<' ';
}
}
}
//이해할 시간 필요
댓글
이 글 공유하기
다른 글
-
웹해킹 1주차 WEB&Internet
웹해킹 1주차 WEB&Internet
2020.03.30 -
지옥방 포너블 1주차 과제
지옥방 포너블 1주차 과제
2020.03.30 -
C/C++ 기초 강의 요약 (섹션4)
C/C++ 기초 강의 요약 (섹션4)
2020.03.27 -
C/C++ 기초 강의 요약 (섹션3)
C/C++ 기초 강의 요약 (섹션3)
2020.03.27