C++언어 공부 0001
C와 C++의 차이점
- C++은 C에서 발전한 언어로, C에 객체지향적 개념을 추가한 언어이다.
- C는 절차지향적 언어이다.
- 객체지향이란 실제 세계를 모델링하여 소프트웨어를 개발하는 것이다.
- 객체지향의 요소 : virtual function, operator overloading, template, handling exception, multiple inheritance, etc
기본 헤더파일의 변경
- C에서는 기본적인 기능을 위해
#include \<stdio.h\>
를 사용하였다면, C++에서는#include \<iostream\>
을 이용한다. - 기본 헤더파일의 변경에 따라 자주 사용되는 키보드와 콘솔을 통한 입출력 함수 또한 변경되었다.
- 출력 함수
printf(내용)
대신cout << 내용
을 이용한다.
- 입력 함수
scanf(변수)
대신cin >> 변수
를 이용한다.
- 출력 함수
참조자(reference) 개념의 추가
- 변수에 별명(alias)을 붙이는 것을 참조자라 한다.
- 만약 abc라는 변수의 별명을 def락 하고싶다면, 아래와 같이 작성해야 한다.
int abc;
int &def = abc;
- 참조자는 선언과 동시에 초기화 되어야 한다.
- 그렇지 않으며 오류가 발생한다.
- 포인터는 변경될 수 있지만 참조자는 변경이 불가능하다.
- 참조자를 상수로 초기화 할 수 없다.
- 참조자의 값을 변경하면, 참조자가 가리키는 변수의 값 또한 변경된다.
- 참조자를 통한 값 변경을 방지하려면
const
키워드를 이용하면 된다.
- 참조자를 통한 값 변경을 방지하려면
이름공간이라는 개념의 추가
- 코드에 여러 라이브러리가 include되고, 만약 여러 라이브러리에서 같은 이름의 함수가 있다면 컴파일러는 어떤 라이브러리의 함수를 이용해야 하는지 모르는 상황이 발생하게 된다. 이때 namespace를 통해 사용할 함수를 정할 수 있다.
- 라이브러리의 사용을 위해 namespace를 사용하겠다고 선언하는 경우의 사용법
#include <iostream>
using namespace std; // std라는 namespace를 사용, iostream 헤더파일에 있는 함수의 namespace임
- 라이브러리 파일에서 namespace를 정해주는 경우의 사용법
namespace abc
{ // This doSomething() belongs to namespace abc
int doSomething(int a)
{
return a;
}
}
논리형 자료형의 추가
- 참과 거짓을 C에서는 0(거짓)과 1(참)로 나타내었지만, C++에서는 이를 위한 자료형이 추가되었다.
true
: 참false
: 거짓- boolean type 변수의 선언은
bool 변수명;
을 이용한다.
문자열 자료형의 추가
- C에서는 배열의 각 칸에 문자를 넣어 문자열처럼 사용하였다.
string
라이브러리를 통해 해당 자료형이 추가되었다.- string type 변수의 선언과 초기화는
string 변수명 = "문자열";
을 이용한다.- 문자 자료형의 초기화는 작은따옴표를 사용하였다.
- 라이브러리의 주요 함수
strlen(s)
: 문자열 s의 길이를 구한다.strcpy(s1, s2)
: s2를 s1에 복사한다.strncpy(s1, s2, n)
: s2의 최대 n개의 문자를 s1에 복사한다.strcat(s1, s2)
: s2를 s1의 끝에 붙여넣는다.strncat(s1, s2, n)
: s2의 최대 n개의 문자를 s1의 끝에 붙여넣는다.strcmp(s1, s2)
: s1과 s2를 비교한다.strncmp(s1, s2, n)
: 최대 n개의 문자까지 s1과 s2를 비교한다.strchr(s, c)
: 문자열 s안에서 문자 c를 찾는다.strstr(s1, s2)
: 문자열 s1에서 문자열 s2를 찾는다.
STL의 추가
- STL(Standard Template Library)이란 컨테이너, 반복자, 알고리즘간의 협력에 기반한 템플릿 라이브러리다.
- template을 이용해서 Generic한 프로그래밍이 가능하다.
- Generic하다는 것은, 타입에 상관없이 작동한다는 것이다.
- 이 부분은 추후 자료구조에 대한것을 공부할 때 다루기로 한다.
예약어(Keyword)의 추가
- C의 예약어를 유지한 채, 새로운 예약어들이 추가되었다.
- 새로운 개념 도입에 따른 추가이다.
- asm, bool, catch, class, const_cast, delete, dynamic_cast, explicit, false, friend, inline, mutable, namespace, new, operator, private, protected, public, reinterpret_cast, static_cast, template, try, typeid, typename, using, virtual, wchar_t, this, throw, true 등이 추가되었다.
변수 선언이 가능한 위치의 추가
- C에서는 조건문, 반복문 등에서 조건 검사를 위한 변수나 iterator 변수를 사용할 때, 반복문 이전에 미리 선언을 한 뒤, 반복문에서 이를 이용하여야 하였다.
- 그러나 C++에서는 아래 예시와 같이 반복문 조건검사 부분 안에서 선언이 가능하다.
if(bool isTrue = get_stats())
{
내용
}
for(int i = 0; i < 10; i++)
{
내용
}