이 영역을 누르면 첫 페이지로 이동
caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

페이지 맨 위로 올라가기

caputdraconis

네트워크 관점에서의 클라우드 컴퓨팅을 공부하는 중입니다 :)

C/C++ 기초 강의 요약 (섹션7)

  • 2020.03.27 21:01
  • Security/지옥방 스터디
글 작성자: caputdraconis
반응형

이제 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<<' ';
        }
    }

}

//이해할 시간 필요
반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 웹해킹 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
다른 글 더 둘러보기

정보

caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

  • caputdraconis의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (168)
      • Cloud (3)
      • Computer Network (12)
      • Database (2)
      • Terraform (2)
      • 🥚고리즘 (13)
      • 겅부겅부🙃 (10)
        • Naver CS50 코칭스터디 (2)
        • Machine Learning (1)
        • Computing System (6)
      • 언어&프레임워크 (20)
        • Python (4)
        • Django (10)
        • Node JS (1)
        • C++ (2)
        • Java (1)
        • Flutter (2)
      • Security (76)
        • WebHacking Study (11)
        • 지옥방 스터디 (22)
        • 여름방학 스터디 (2)
        • PWN Study (6)
        • SUA Reversing Study (3)
        • PWN (3)
        • WebHacking (20)
        • Reversing (4)
      • 알고 있으면 도움되지 않을까,,? (23)
      • 일상다반사 (1)
      • 근황 정리 (1)
      • 42 Seoul (1)
        • Setting (1)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 파이썬
    • 리스트함수
    • old-16
    • Python
    • 파이썬함수
    • 웹해킹.kr
    • 드림핵
    • 파이썬기초

    나의 외부 링크

    • Github
    • solved.ac
    • caputdraconis@kakao.com

    정보

    caputdraconis의 caputdraconis

    caputdraconis

    caputdraconis

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © caputdraconis.

    티스토리툴바