[이미지 업로드]

 

웹페이지를 만들다보면 거의 대부분 이미지를 화면에 넣어야 하는 일이 생깁니다.

웹페이지에 이미지가 없이 글만 있다면 너무 지루하겠죠?

그럴 때 필요한 태그가 바로 이미지 태그입니다. img 라고 visual studio에 치기만 해도

<img src=" " alt=" " > 라고 자동으로 문구가 생성이 됩니다. src 뒤의 따옴표 있는 곳이 이미지 소스를 넣는 곳입니다.

저는 소스코드가 있는 같은 폴더에 cat1이라는 jpg파일을 미리 준비해주었습니다.

같은 폴더 내에 있는 경우에는 그냥 파일제목+ 파일형식(JPG, PNG, JPEG) 등을 기입하면 됩니다. 

위 코드를 실행한 페이지를 볼까요?

 

 

자! 예상한대로 미리 준비한 cat 사진이 잘 출력이 되었습니다.

그런데 사진 아래에 '이미지 업로드 실패'라는 문구는 왜 나타난 걸까요??

 

img 태그에는 alt 라는 속성이 있습니다.

아마도 alternative의 줄임말같은데, 만약에 img src업로드가 실패하면 대체적으로 표기되는 문구를 미리 설정하는 기능입니다. 오른쪽의 코드상에서 제가 "dog.jpg" 파일또한 업로드하기를 시도했는데, 폴더에 해당 파일이 없어서 alt에서 정해놓은 '이미지 업로드 실패' 라는 문구가 출력된 것입니다.!!

 


[이미지 스타일]

 

당연한 말이겠지만, 이미지를 업로드할 때 가로 세로길이 , 테두리 등 다양한 스타일요소를 미리 지정할 수 있습니다.

 

이렇게 html에서 바로 width/height 속성을 써도 되고, style속성 내에서 기입해도 상관없습니다.

 

물론 아래 그림과 같이 <style> 태그 내에서 적는게 더 보기 편하고 좋겠죠!!

style태그 내부에서 가로세로 길이를 지정하고, 테두리 색상과, 두께를 지정했습니다. 

border를 디자인할 때는 주의점이 있는데요!! 일반 테두리를 만드신다고 가정할 때 무조건! border-style을 지정해주셔야 합니다~!! 지정해주시지 않으면 테두리가 none 으로 설정되어 아무것도 나오지 않는답니다.!!

 


[이미지 맵]

 

img 태그에는 웹페이지에 띄운 이미지의 일부를 통해 다른 사이트로 갈 수 있는 기능인 map 기능이 있습니다.

map 태그를 통해서 이미지를 좌표구간으로 나눈뒤 어떤 구역은 naver로 연결되고... 어떤 구역은 google 로 연결되는 등 한 이미지 안에 다양한 링크를 삽입할 수 있습니다. 

저는 사과와 오렌지 이미지(1개의 이미지)를 삽입하여

좌측을 클릭하면 오렌지 농장사이트가 ,   우측을 클릭하면 사과 농장사이트가 뜨도록 하였습니다.

map을 사용하려면 area태그를 사용해야 하는데요. 

   

    (area 태그)

- shape : rect (사각형) / circle / poly(다각형)

- coord : x시작좌표, y시작좌표, x끝좌표, y끝좌표

 

등을 미리 설정해주어야 합니다.

 

 

마지막으로 <img>태그와 <map>태그를 연결하려면 usemap속성이 필요한데요!!

<map name="love">처럼 map의 이름을 love 로 지정했으면

img 태그의 내부에 usemap 속성에 <img ~~~~ usemap="#love">와 같이 map이름 앞에 #을 붙여 표시해주어야 합니다.

'Programming Language > html css' 카테고리의 다른 글

[html] 1. 링크  (0) 2022.12.31

[하이퍼링크 생성하기]

 

우리가 웹페이지에서 어떤 버튼을 누르면 다른 페이지가 이동할 수 있습니다. 이것을 흔히 하이퍼링크라고 하는데요.

웹페이지를 만들 때 이 하이퍼링크 기능을 생성하기 위해서는 아래와 같이 <a>태그의 "href" 속성이 필요합니다.

 

 

 

네이버 로그인 화면 중 "네이버로고" 의 소스코드 캡쳐화면

 

웹페이지 화면에서 마우스 우클릭하시면 이렇게 소스코드를 확인하실 수 있습니다. (간혹 막힌 곳도 있음..)

저는 네이버 로그인 화면의 소스코드를 확인하였는데요. 우측 회색으로 표시된 곳을 보시면

 

<a href = "https://www.naver.com"  ~~~~~ >  ....</a>

라고 되어있는 것을 확인할 수 있습니다.

 

이건 해당 문구를 하이퍼링크 형태로 변환하여 클릭하면 해당 페이지로 이동할 수 있게끔 하는 기능입니다.

이동하고 싶은 페이지 링크를 href= " ~~~~~ " 형식으로 지정해주시면 됩니다.

 

 


 

 

[ target 속성 정하기]

 

이제 하이퍼링크를 생성했으니 다음에 정해야할 것은 target 속성 값입니다.

사실 target 속성 값은 따로 표기하지 않아도 , default 값이 있기 때문에 상관은 없지만....

링크를 클릭하면 새창에서 열릴지 기존 창에서 열릴지를 정하고 싶다면 target 속성값을 미리 설정해주어야 합니다.

 

target 속성 값에는 (    _blank    )     (     _self     )    (     _parent     )      (     _top     )    (     _frame     )

이렇게 5 가지가 있습니다.

 

<_blank>

위 속성은 흔히 우리가 해당 링크를 누르면 새 탭이나 새 창으로 열리는 경우에 쓰입니다.

 

<_self>

위 속성은 "디폴트 값"인데요. 따로 target 값을 정해주지 않으면 자동으로 설정이 됩니다.

네이버 로그인 창도 따로 설정이 되어있지 않으니 이 값으로 볼 수 있겠습니다.

위 속성의 경우 새 창이 열리지 않고 해당 페이지화면에서 바로 다음 페이지 화면으로 넘어가는 경우입니다.

여러 창이 생기지 않아서 편리하지만, 작업시 앞의 창이 동시에 필요할 경우 추가로 다시 들어가야 하는 번거로움이 있겠군요...

 

 

<_parent>

target 값이 _parent 값이면 한단계 위 조상페이지에서 링크페이지가 열립니다. 물론 이 경우에도 새창이나 새탭이 생성되는게 아니라 부모페이지->링크페이지로 바로 변환됩니다.

 

 

<_top>

이 속성도 _parent 속성과 비슷한데요. 단지 다른 점은 부모의부모의부모의...부모 이냐   바로 직속위 부모이냐가 다른 점입니다. 맨 꼭대기 최고조상님 페이지를 찾아서 그 페이지를 링크페이지로 바꿔줍니다.

 

 

 


[link 상태 정하기]

 

이제 마지막으로 하이퍼링크의 상태를 정해야 합니다.

하이퍼링크의 상태를 정한다는건 뭐... 아무것도 하지 않을 때,,, 마우스 위로 지나갈 때,,,, 클릭할 때 등의 상황에서 링크의 모양이 어떻게 변하냐를 의미하는데요.

(  link  )    (   visited   )   (   hover   )   (    active   )  이렇게 4가지가 있습니다. 

 

< link > 사용시

link상태의 경우는 그냥 해당 텍스트가 순수한? 링크임을 표시하는 기능입니다. 저는 grey 색상으로 지정해주었습니다.

 

 

< visited > 사용시

 

visited상태는 해당 페이지를 이미 방문했다는걸 표시해주는 기능입니다. 링크를 한번 눌러본 상태에서 다시 들어가보았더니 이렇게 보라색으로 표시되는군요. 물론 색상을 style에서 마음대로 지정할 수 있습니다.

 

 

< hover > 사용시

 

원래는 링크에다가 마우스 화살표를 대고 있는 화면을 캡쳐한건데 화면상에는 화살표표시는 안되는 군요...ㅎㅎ

아무튼 저 위에다가 hover (허공에 지나가다) 를 하게 되면 style 태그에 지정한대로 색상이 pink로 변경됩니다.

마우스를 떼면 다시 원래 색으로 돌아가구요.

 

<active 사용>

마지막으로 active는 링크를 클릭했을 때 순간적으로 변하는 색상을 지정할 수 있는 기능입니다. "방금 클릭을 했음." 정도로 기억하면 될 것 같습니다.

 

 

 

'Programming Language > html css' 카테고리의 다른 글

[html] 2. 이미지  (0) 2023.01.01

JAVA나 C++과 같은 객체지향언어를 공부하는데 첫 번째로 중요하다고 할 수 있는 개념은 클래스와 상속 입니다.

실제로 프로그램을 짜기에 앞서 클래스와 상속을 얼마나 효율적으로 잘 설계하느냐에 따라 앞으로의 개발난이도가 좌우된다고 해도 과언이 아닌데요.

이제 막 자바를 공부하기 시작한 초보자들 기준으로 클래스와 상속 개념에 익숙해졌다면 그 다음으로 공부해야 할 개념은 바로 다형성(polymorphism)입니다.

 

 


 

Q. 다형성이란

 

 

 

다형성이란, 쉽게 말해서 "조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있다"는 개념입니다.

이해를 돕기위해 '사람' 클래스를 만들어보았습니다.

 

class People{

    String name;

    int age;

   void working();  

   void sleeping();

}

 

 이 사람 클래스는 노동하고 잠자는 것말고는 딱히 정해진 것이 없습니다.(뭔가 슬프네요...) 

그래서 H백화점 VIP 고객으로 만들어주었습니다.

 

class HDepartmentStoreVip extends People{

    int purchasingAmount; //구매실적

    void purchasing();

}

 

(1) People p = new HDepartmentStoreVip(); 

-> 위에서 말한대로 조상클래스People의 참조변수 p자손클래스HDepartmentStoreVip의 인스턴스참조하는 것은 가능합니다. 

 

같은 타입의 클래스의 인스턴스를 참조하는 것도 물론 가능합니다.

(2) HDepartmentStoreVip h = new HDepartmentStoreVip(); 

 

하지만 당연히 차이가 존재하는데요, (2)와 같이 같은 타입의 클래스의 인스턴스를 참조할 때 참조변수는 모든 멤버를 사용할 수 있지만, (1)과 같은 경우는 애초에 People클래스에 존재하지 않는 purchasingAmount나 purchasing()과 같은 멤버는 사용할 수가 없습니다.

 

위의 개념을 이해했다면 자손클래스의 참조변수는 조상클래스의 인스턴스를 참조할 때는 어떻게 되는지 궁금할 것입니다. 정답은 "안된다" 입니다~! 애초에 자손클래스의 참조변수는 조상클래스의 멤버개수 이상이기 때문에 내가 참조하고자 하는 멤버가 없을 경우가 항상 존재합니다(그러지 않으면 굳이 만들 필요가...) .따라서 이런 경우는 프로그램 상에서 컴파일에러를 띄웁니다.

 

 


 

Q. 참조변수 형변환

 

 

기본변수와 마찬가지로 참조변수도 물론 형변환이 가능합니다. 상속관계에 있는 클래스 사이에서만 가능하고,

(1)자손->조상 (=upcasting이라고도 합니다.)

(2)조상->자손 (=downcasting)

위의 두 가지 케이스 모두 가능합니다.

 

(1)의 경우는 심지어는 조상의 조상의 조상... 까지도 형변환이 가능합니다. 하지만 여기서 두 케이스의 차이점은(1)의 경우에는 형변환이 생략가능하나, (2)의 조상에서 자손타입으로의 형변환은 생략이 불가하다는 점입니다. 간단하게 기본형 변수의 형변환만 떠올려봐도 큰 자료형에서 작은 자료형의 형변환은 생략이 불가했던 것처럼, 참조변수도 같은 원리로 적용된다고 보시면 될 것 같습니다.

 

위의 People과 HDepartmentVip 클래스로 예시를 들자면,

{

People p= null;

HDepartmentVip h1=null;

HDepartmentVip h2=new HDepartmentVip();

 

p=h2;  //->다음과 같은 경우에는 p=(People)h2; 에서 (People)형변환이 생략가능하지만,

h1=p;  //-> "error"!!!!

         //  이처럼 조상클래스 People에서 자손클래스 HDepartmentVip로 형변환할 때는

         //  무조건 h1=(HDepartmentVip)p; 과 같이 형변환을 명시해주어야 합니다.!!

}

 


오늘은 자바의 다형성개념과 참조변수의 형변환에 대해 정리하였습니다.

다음 포스팅에는 다형성의 세부개념에 대해 설명하겠습니다. 즐코하세요!

위 포스팅 내용은 윤성우의 열혈 C++ 책을 참고하였습니다.

 

C를 배우고 갓 C++을 입문하신 분들은 처음 C++소스코드를 접할 때

 

std::cout<< , std::cin>> 등의 입출력문과 <iostream> 헤더파일 말고도  다양한  새로운 문법들을 마주하게 되는데요

 

namespace도 그 중 하나입니다.

 

 

 

처음볼 때는 생소할 수 있지만, 몇 번만 반복해서 보다보면 금방 익숙해지는 개념입니다.

 

namespace란 이름 그대로 '공간에 이름을 붙여논다' 라고 이해하면 쉽습니다.

 

 


 

Q. 그렇다면 namespace는 왜 필요한 걸까요?

 

 

친구랑 만나기로 약속했다고 가정해봅시다. 

 

A:  토요일 두 시에 스타벅스에서 만나자~~

B:  어디 스타벅스?

A:  신촌 거기 있잖아?

B:  거기가 어디야?

 

위는 고구마 백개먹은 것 같은 대화입니다. 

 

A와 B가 어디 스타벅스인지 서로 정확하게 의사소통 전달이 안 되는 원인은 

 

1.신촌에 스타벅스가 여러개 있다.

2. "위 구역에 존재하는 유일한 스타벅스" 를 지칭하지 않았다.

 

위와 같은 이유 때문입니다. 

 

따라서 위 상황에서 A는 4번출구 방향 스타벅스 라고 스타벅스에 namespace를 부여해 주어야 합니다.

 

 

 

스타벅스에 4번출구와 8번출구라는 네임스페이스를 부여해 주었다.

 

 

namespace를 사용하는 방법은 위와 같습니다.

 

namespace 뒤에 원하는 이름을 붙여주고 괄호 안에 내용을 작성해주시면 됩니다.

 

예시를 보시면 Exit() 라는 똑같은 함수가 선언되었는데 에러가 나지 않는 모습을 확인할 수 있습니다.

 

그 이유는 다른 namespace 안에 소속되어 있기 때문입니다.

 

 

 

 

연산자 ::

 

 

어느 namespace안에 있는 함수인지 지칭할 때는 바로 연산자 :: 를 활용하여  

 

NAMESPACE명 :: 함수명( );

 

라고 명명해주면 됩니다.

 

 

 


Q. namespace 안에 namespace를 중복해도 써도 되나요?

 

생각해보면 4번출구와 8번출구에 있는 스타벅스는 한 둘이 아닐 것입니다. (합정에도 있고,, 홍대에도 있고..)

 

그렇기 때문에 우리는 정확한 위치를 명시하기 위해서는 더 많은 namespace가 필요한데요

 

 

 

 

 

 

따라서 저는 4번출구와 8번출구를 신촌이라는 namespace로 감싸주었습니다.

 

물론 신촌이라는 namespace는 서울, 서울이라는 namespace는 한국으로 더 많이 중복해서 감쌀 수 있겠죠?

 

내부의 변수나 함수에 접근하려면 아까와 같이 ::연산자를 사용하면 됩니다.

 

KOREA :: SEOUL :: SHINCHON :: EXIT8 :: Exit();

 

이것이 좀 길다면 이름공간에 대한 별칭을 지어줘도 됩니다.

 

namespace 신촌팔출=KOREA :: SEOUL :: SHINCHON :: EXIT8;

 

그러면 호출할 때 신촌팔출::Exit(); 로 축약을 할 수 있습니다.

 

 

사실 우리는 C++에서 입출력을 했다면 이전부터 namespace를 쓰고 있었을 것입니다.

 

std::cout , std::cin 에서 std가 바로 namespace이기 때문입니다.

 

헤더파일인 <iostream>에 선언된 std라는 namespace에서 우리가 그동안 입출력 함수를 불러와 쓰고 있었던 것입니다.

 

 

 


Q.근데 사실 맨날 std::를 붙이기 좀 귀찮은 것 같아요...

 

아마 많은 분들이 그간 std:: 를 붙이는데 많이 귀찮으셨을 거라 생각됩니다...(사실 저도..)

 

std namespace를 using이란 키워드를 이용하여 헤더 밑(전역부분) 에 선언을 하면

 

앞으로 일일히 std::를 붙이지 않아도 됩니다. 

 

 

 

 

 

 

하지만 만약 이것도 세줄이나 된다! 하시는 분들은 더 생략할 수도 있습니다.

 

 

 

위의 예시처럼 아예 std전체를 using으로 선언해버리면 됩니다.

 

아주 편해보이지만 , 첫 번째 예시보다는 이름이 충돌할 가능성이 높아지기 때문에 무조건 좋다고만 할 수는 없습니다.

 

 


오늘은 namespace에 대하여 알아봤습니다.

여기까지 읽어주셔서 감사합니다.

'Programming Language > C++' 카테고리의 다른 글

[C++이론] C++에서의 함수오버로딩  (0) 2020.07.17
[C++이론] C++에서의 입출력방식  (2) 2020.07.17
위 포스팅 내용은 윤성우의 열혈 C 책을 참고하였습니다.

 

 

 

이 블로그는  독자들이 대체로 처음 해당 문법을 접할 것이라고 가정하고 적는 것이기 때문에 

 

포인터란 무엇인가에 대해 간단하게 요약해드리겠습니다.

 


포인터 변수와 & 연산자

포인터의 사용을 이해에 앞서 간단한 예시를 들어보겠습니다. 

 

위 세줄의 코드는

 

첫 번째 줄 :  정수 10이 저장된 num을 선언

두 번째 줄 :  포인터 변수 ptr을 선언 (주솟값 저장을 위해)

세 번째 줄 :  ptr에 num의 주솟값을 저장시킨다.

 

라고 간단하게 이해하시면 됩니다.

 

세 번째 줄에서 &는 "오른쪽에 등장하는 피연산자(num)의 주솟값을 반환하는 연산자" 이고 잘 이해해두어야 합니다.

 

참고로 포인터 변수를 선언할 때 *는 어디 쪽에 붙여도 무관합니다.

 

(   int* ptr     ==  int * ptr   ==  int *ptr  )   

 

위 코드를 그림으로 그려보자면 다음과 같습니다.

그림이 아주 정신없죠?

 

위 그림에서 캐치해야될 부분은 ptr에 저장된 값이 num의 시작번지의 주솟값이라는 점입니다.

 

그래서 ptr(포인터) 를 통해서 num의 메모리에 접근할 수 있는 것입니다.

 

그 다음으로 중요한 점은 포인터 변수 ptr의 크기가 8바이트라는 것입니다.

 

위 그림에서는 제가 8바이트로 그렸지만, 사실 8바이트가 아니라 4바이트가 될 수 있습니다.

 

왜냐하면 운영체제가 32바이트인 경우에 포인터의 크기는 4바이트 ,

 

64바이트인 경우에는 8바이트로 결정되기 때문입니다.

 

저는 현재 Visual Studio 2019 버전을 사용하고 있는데 32 비트 64비트 모두 지원하기 때문에 

 

두 경우를 모두 테스트 해보았습니다.

 

 

32비트체제

 

Debug 옆에 선택란에서 x86을 선택하면 32비트로 컴파일할 수 있습니다.

이 경우에 테스트하면 ptr의 크기가 4바이트로 나옵니다.

 

64비트체제

 

반대로 64비트에서 테스트해보면 ptr의 크기가 8바이트로 나옵니다.

 

각자 포인터공부하시면서 내가 그동안 32비트로 컴파일했는지 64비트로 컴파일했는지도 확인해보시길 바랍니다.

 

 


* 연산자를 활용한 예시 

 

추가로 * 연산자를 활용한 기본적인 예시를 하나 보여드리겠습니다.

 

 

 

다음의 내용을 그림으로 또 표현해봤는데요

 

 

나옹이가 숨겨둔 금화창고에 금화와 은화를 채워넣는 이야기입니다.

 

1.Ptr=&금화;

 

라는 코드를 통해 나옹이는 금화창고로 가는 길을 선택하게 됩니다.

 

2.(*ptr)+=50;

 

그리고 나옹이는 열쇠 (*) 를 통해 창고로 완전히 들어가게 되고 금화를 50개 넣어두고 나옵니다.

 

 

그런데 갑자기 나옹은 은화를 채워야겠다는 생각이 들어 길을 다시 바꾸게 됩니다.

 

3.Ptr=&은화;

 

이번에는 위의 코드를 통해 나옹이는 은화창고로 가는 길을 선택하게 됩니다.

 

4.(*ptr)+=30;

 

그리고 나옹이는 열쇠 (*) 를 통해 은화창고로 완전히 들어가게 되고 은화를 30개 넣어두고 나옵니다.

 

 

(참고: 윤성우의 열혈 C)

 


위의 예시가 가장 중요하게 말하고자 하는바는

 

"하나의 포인터변수 ptr로 여러가지 메모리(금화, 은화)에 접근할 수 있다" 였습니다.

 

포인터에 대한 더 자세한 내용은 나음 포스팅에서 찾아뵙겠습니다.

 

다들 좋은 하루 되세요~

위 포스팅 내용은 윤성우의 열혈 C++ 책을 참고하였습니다.

 

 

C에서는 함수의 이름이 같다면 컴파일 오류가 발생합니다.

 

하지만 C++에서는 함수의 이름이 같더라도 컴파일 오류가 일어나지 않는데요

 

Q.왜 함수의 이름이 같은데 컴파일 오류가 나지 않을까요?

위 예시를 보면 void 형 함수 Naong 을 세 개나 선언했는데 컴파일 오류가 발생하지 않는 것을 확인할 수 있습니다.

 

C++에서 함수오버로딩이 허용되는 이유는 C++의 함수 호출방식 때문인데요.

 

C++에서는 함수를 호출할 때 (1)함수의 이름 과  (2)매개변수 로 구분하기 때문에

 

함수의 이름이 같더라도

 

1. 매개변수의 자료형이 다르다

2. 매개변수의 개수가 다르다

 

다음의 경우에 해당되면 다른 함수로 인식하는 덕분에 오버로딩이 가능합니다.


 

따라서

Melon 이라는 이름의 함수를 만들 때

 

void Melon(char n1){}

void Melon (int n1){}

void Melon(int n1, int n2){}

void Melon(char n1, char n2){}

 

위와 같이 만들어도 에러가 나지 않는 것을 확인할 수 있습니다.

 


 

하지만 주의해야 할 점은 

 

void Melon(char n1){}     int Melon(char n1){}

void Melon (int n1){}

void Melon(int n1, int n2){}

void Melon(char n1, char n2){}

 

 

다른 것은 다 동일한데 반환형을 다른 자료형으로 바꿨다고 해서 다른 함수로 인식되는 것이 아니라는 것입니다.

 

C++은 엄연히 두 가지 '함수의 이름'과 '매개변수' 로만 판단한다는 것을 다시 한 번 새겨봅시다~

'Programming Language > C++' 카테고리의 다른 글

[C++이론] namespace란 무엇일까?  (0) 2022.04.15
[C++이론] C++에서의 입출력방식  (2) 2020.07.17
위 포스팅 내용은 윤성우의 열혈 C++ 책을 참고하였습니다.

 

안녕하세요! (첫글이네요!)

 

유명한 기술블로거를 꿈꾸며 블로그를 시작하게 된 나옹입니다.

 

기록이라는 행위를 함으로써 거대한 지식의 흐름에 사막의 모래 한톨만큼이나마 일조해보겠습니다 ^^


 

C++은 C언어를 포함하고 있죠.

 

그래서 저희가 여태까지 C언어로 코드를 작성하면서  C++컴파일러로도 작성이 가능했습니다.

 

(여태까지 작성한 파일을 보면 .cpp일것이다)

 

 

하지만 C++은 C언어가 지니지 않는 문법적 특성도 아주 많이 가지고 있습니다.

 

우선 이번 글을 입출력문부터 살펴보고 가겠습니다.

 

 


 

Q.  C에서의 출력문은 printf인데 C++에서의 출력문은 무엇일까?

 

C언어로 작성한 코드

 

 

C++로 작성한 코드

 

위 두 코드의 출력된 결과는 

 

"나옹이는 금화를 갖고 있다."

"나옹이는 금화를 1개 갖고 있다."  로 동일하다는 것을 알 수 있습니다.

 

더불어 출력을 할 때 C++에서 C언어와 다른 세 가지 다른 문법적 특징을 발견할 수 있습니다.

 

첫 번째로는

1. 헤더파일 선언문입니다.  

 

 

C에서는 입출력을 할 때

 

printf와 scanf호출의 목적으로  #include<stdio.h>를 써줘야 한 반면,

 

C++에서는 입출력을 할 때  #include <iostream>을 선언해야합니다.

 

(여기서 왜 c++에는 뒤에 .h가 붙지 않나 하는 의문이 들 수 있는데요,  과거에는 뒤에 .h를 붙였는데 현재 표준 헤더파일 선언에서는 확장자를 붙이지 않고 있다고 합니다.)

 

 

 

두 번째 특징으로는 

2. std:cout  와  <<  에 의한 출력입니다.

 

 

사실상 출력을 위한 기본적인 도구는 std:cout << "내가 말하고 싶은 문장"  입니다

 

여기서 뒤에 덧붙이고 싶은 문장이 있다면 << "덧붙이고 싶은 문장" 을 추가해주면 되는 것입니다.

 

그리고 편리한 점은 C언어와 달리 %d와 같은 서식문자를 쓸 필요없이 바로 변수(gold)를 사용할 수 있다는 점입니다!!

 

 

마지막 특징으로는

 

3. 개행입니다.

 

해당 콘솔 화면은 위 코드를 출력한 결과물인데요

 

자동적으로 개행이 된 것을 확인할 수 있습니다.

 

무엇으로 인해 개행이 된 걸까요?

 

바로 << 다음에 오는 

 

std::endl;  으로 인해 다음 문장으로 넘어간 것입니다.

 

 

이로써 출력문에 대한 세 가지 특징 설명을 마쳤습니다.

 

 


Q.  그럼 scanf대신에 C++에서는 무엇을 쓸까?

 

일단 입력을 할 때도 마찬가지로 헤더파일은 #include<iostream>을 선언해주셔야 합니다.

 

출력문과 다른점은 입력문에는 std::cout대신에 

 

 

std:cin   와 >>연산자가  사용된다는 점입니다.

 

여기서 추가로 설명드릴 점은 

 

std:cin >> 첫 번 째 변수 >> 두 번 째 변수;

 

위와 같은 경우에는 순서대로 입력이 인식된다는 점입니다.

 

8행에서   std::cin >> 나옹이>> 피카츄; 라고 작성을 했는데요

 

 

 

콘솔을 돌리면 역시 입력한 순서대로 나옹이와 피카츄 마리수가 나오는 것을 확인할 수 있습니다.

 


 

 

입출력에 대한 설명은 여기까지 입니다. 다들 즐거운 하루 되세요~~

'Programming Language > C++' 카테고리의 다른 글

[C++이론] namespace란 무엇일까?  (0) 2022.04.15
[C++이론] C++에서의 함수오버로딩  (0) 2020.07.17

+ Recent posts