일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Leviathan
- C++
- radare2
- 시스템 프로그래밍
- 알고리즘
- 컴퓨터구조
- px4
- pwncollege
- 프로그래밍
- Pwnable.kr
- C언어
- 리눅스 커널
- 커널
- pwn.college
- 시스템
- 시스템프로그래밍
- 리눅스
- 리눅스커널
- kernel
- 리버싱
- write up
- 시스템해킹
- wargame
- Bandit
- 시그널
- css
- 취약점
- 드론
- 어셈블리어
- 워게임
- Today
- Total
Computer Security
#1 C언어와 C++비교하기 본문
C++에서의 Hello World 는?
코드예시
#include <iostream>
using namespace std;
int main(void) {
cout << "Hello World" << endl;
system("pause");
return 0;
}
가장 기본적인 뼈대를 이루는 위 코드이다.
C++의 iostream
-C++의 iostream 라이브러리는 C++표준 입출력 라이브러리이다.
-C언어의 stdio.h와 흡사하게 사용된다.
C++의 기본 입출력
-C언어에서는 printf(), scanf() 함수에서 형식 지정자를 적어줘야 했지만, C++에서는 형식 지정자를 넣어주지 않아도 변수를 타입에 맞게 적절히 입출력 해준다.
코드 예시
#include <iostream>
#include <string>
int main(void) {
std::string input; //스트링이라는 라이브러리를 사용하고 거기서 input을 쓰겠다 선언
std::cin >> input;
std::cout << input << std::endl;
system("pause");
return 0;
}
만약, using namesapce std; 가 없다면, 코드마다 std:: 를 선언 해주어야 한다.
결과 값
원래 문자열을 사용하려면 C언어에서는 입력받고 그것을 배열에 저장하고, 그로부터 출력 했어야 했다면, C++에서는 기본적으로 스트링을 제공하고 있기에, 그런 복잡한 작업이 필요 없다.
C++의 기본 입출력
C++ 기본 입출력 라이브러리에서는 연산자 >>와 <<를 제공한다.
이를 활용하여 모든 기본 자료형을 입출력 할 수 있다.
특히 입력을 받는 연산자 >>는 공백 문자(Space, Enter, Tab)을 기준으로 입력을 받는다.
C++의 네임스페이스
네임스페이스(Namespace)는 특정한 영역에 이름을 설정할 수 있도록 하는 문법이다.
네임스페이스는 서로 다른 개발자가 공동으로 프로젝트를 진행할 때 각자 개발한 모듈을 하나로 합칠 수 있도록 해준다.
코드예시
#include <iostream>
using namespace std;
namespace A {
void function() {
cout << "A namespace" << endl;
}
}
namespace B {
void function() {
cout << "B namespace" << endl;
}
}
int main(void) {
A::function(); //범위 지정 연산자(::)
B::function();
system("pause");
return 0;
}
결과 값
using 키워드를 이용해 표준 라이브러릴(std)를 모두 사용하도록 처리할 수 있다.
코드예시
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string input;
cin >> input;
cout << input << endl;
system("pause");
return 0;
}
결과 값
C++의 문자열 자료형
C++은 표준 문자열 자료형을 제공한다.
string 헤더 파일에 정의되어 있다.
C언어의 문자열: char arr[SIZE];
C++의 문자열: string s;
코드 예시
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string input;
cin >> input;
for (int i = 0; i < input.size(); i++) {
cout << input[i] << '\n';
}
system("pause");
return 0;
}
input이 단순한 자료형 선언처럼 보이지만, 내부적으로 함수를 가지고 있다.
input.size() 같은경우 문자열의 길이를 반환한다.
cin 같은경우는 공백이 생기면 끊어진다.
이럴땐, getline 을 이용하면, 공백을 포함해 한 줄을 모두 문자열 형태로 입력 받을 수 있다.
코드예시
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string input;
getline(cin, input);
for (int i = 0; i < input.size(); i++) {
cout << input[i] << '\n';
}
system("pause");
return 0;
}
결과 값
C++의 문자열 자료형
C++의 string은 다른 자료형으로의 변환이 간편하다.
to_string :정수를 문자열로 바꾸어 준다.
stoi = string to int : 문자열 -> 정수
stof = string to float
stol = string to long
stod = string to double
코드 예시
#include <iostream>
#include <string>
using namespace std;
int main(void) {
int i = 123;
string s = to_string(i);
cout << "정수 -> 문자열: " << s << endl;
s = "456";
i = stoi(s);
cout << "문자열 -> 정수: " << i << endl;
system("pause");
return 0;
}
결과 값
C++의 동적 할당
원래 C는 stdlib.h 헤더파일에서 malloc 함수를 이용해 동적 할당을 시행했지만, new 를 이용해 시행 할 수 있다.
또, free 대신, delete 를 이용해 할당 해제를 할 수 있다.
코드 예시
#include <iostream>
#define SIZE 100
using namespace std;
int* arr;
int main(void) {
arr = new int[SIZE]; //동적 할당
for (int i = 0; i < SIZE; i++) {
arr[i] = i;
}
for (int i = 0; i < SIZE; i++) {
cout << arr[i] << ' ';
}
delete arr; //할당 해제
system("pause");
return 0;
}
결과 값
정리
C언어와 C++ 비교하기
1) C++는 객체 지향 패러다임을 따르고 있는 언어이지만 C언어는 절차적 프로그래밍 언어이다.
2) 다시 말해 C++은 객체 중심의 언어이며 C언어는 함수 기반의 언어이다.
3) C++은 C언어의 구조체(Struct) 대신에 클래스(Class)를 사용한다.
4) C++는 공식적으로 예외 처리(Exception Handling) 기술을 지원한다.
5) C++에서 가장 많이 사용되는 표준 라이브러리 중 하나는 string 이다.
'프로그래밍 > C++' 카테고리의 다른 글
#6 C++ 프렌드 (0) | 2022.06.17 |
---|---|
#5 C++ 오버로딩 (0) | 2022.06.16 |
#4 C++ 클래스 상속 (0) | 2022.06.15 |
#3 C++ 생성자와 소멸자 (0) | 2022.06.14 |
#2 C++의 클래스 (0) | 2022.06.13 |