C++ 예습

202114013 김동현

대표적인 객체지향 언어

C / C++ / C# / Objective-C / JAVA 소스 비교

: 다른 부분도 있지만 메인 함수, 중괄호, 세미콜론은 똑같다.

C++ = 클래스를 같는 C언어

캡슐화, 상속성, 다형성

제어문- 조건문, 반복문, 분기문

조건문: if / if~else / switch~case

반복문: for / while / do~while

분기문: goto / continue / break

#include <iostream>

endl = \n

printf = std::cout<<“~”;

using namespace std;

using std::cout;

using std::endl;

cout<<: 화면으로 출력하는 객체, printf

cin>>: 키보드로부터 데이터를 입력 받는 객체, scanf()

----

매크로 명: 명사, 모두 대문자

8진수 앞에는 0을 씀

16진은 앞에 0x를 씀

자료형 변수명;

const 키워드를 이용하면 변수의 초기값을 변경할 수 없음.

자동 형 변환

전처리기: 컴파일 하기 전에 수행하는 것

cast 연산자: (자로형) 변수

삼항 조건 연산자: 수식1 ? 수직2: 수식3

: 수식1이 참이면 수식2를 실행하고 아니면 수식3을 실행하라.

대입 연산자: 변수=수식

관계 연산자: <, <=, >, >=, ==, != / 참이면 1, 거짓이면 0이 나옴

논리 연산자: && (And), || (Or), ! (Not) / ‘’

비트 연산자: & (And), | (Or), ^ (Xor 두 비트가 다른 경우에 1),

~ (1의 보수. 비트를 바꿈)

비트 시프트 연산자: a<<b: a에 2의 b승을 곱함 (정보의 손실이 없을 때)

a>>b a를 2의 b승으로 나눔 (정보의 손실이 없을 때)

&연산자: 변수의 주소 저장

----

제어문(Control flow)

제어문- 조건문, 반복문, 분기문

조건문: if / if~else / switch~case

반복문: for / while / do~while

분기문: goto / continue / break

if(조건식){

살행문;

}

if(조건식){

실행문;

}

else if{

실행문;

}

switch(조건식){

case 상수1:

문장1;

case 상수2

문장2;

case 상수n;

문장n;

default:

문장;

break;

}

for(제어 변수;조건식;증감식){

반복 실행될 문장;

}

while(조건식){

반복 실행될 문장;

}

do{

반복 실행될 문장;

}while(조건식);

break 문 = 특정루프를 빠져 나올 때 씀 =break;

continue 문 = 루프의 조건식을 검사하는 부분으로 다시 돌아감.

continue 아래 부분을 실행하지 않고 다시 조건을 검사하는 부분으로	간다.

goto 문 = goto A;

A:

동전 = 전달인자 (argument)

자판기 안의 동전 = 매개변수 (parameter)

커피 = 리턴값 (return value)

C프로그램은 함수의 집합

함수: 특정한 작업을 하도록 만들어진 독립적인 단위 모듈

C언어는 큰 프로그램 하나를 여러 개의 함수로 분할 하여 구현하는

구조적 프로그래밍(structured programming)방식의 기본

C 프로그램의 기본 틀

int main(void) / 괄호 안의 void 생략 가능

{

코드작성

return 0; / return 0; 생략 가능 하지만 쓰는게 좋음

}

표준 라이브러리 함수 = printf(), scanf()...등등

= 런타임 라이브러리(C Run Time:CRT)라고 부름

표준 헤더 파일 = 표준 라이브러리 함수들을 선언해 놓은 파일

ex) stdio.h = printf(), scanf()등 표준 입출력 함수들을 선언 (원형, prototype)이 들어 있다.

사용자 정의 함수

함수명 =동사, 모두 소문자와 단어 사이 언더스코어(_)

동사, 의미가 바뀌는 부분은 대문자, 나머지는 소문자

동사, 첫 글자와 의미가 바뀌는 부분은 대문자. 나머지는 소문자

함수 정의 = 함수 만들기

ex) void brae()

{

printf(“안녕 난 김동현이얌”)

}

함수 호출 = 함수 사용하기

ex) brae();

함수 선언 = 함수의 사용법, 컴파일러에게 함수에 대한 정보를 미리 줌, 프로그램	윗부분에 선언함

ex) void brae();

함수 만들기 – 문자 리턴 자판기 함수

#include <stdio.h>

char vending(int x)

{

if (x==1) return ‘A’

else return ‘B’

}

int main()

{

char x;

x= vending(1);

printf(%c\n , x);

return 0;

}

문자열 리턴 자판기 함수

#include <stdio.h>

const char* vending(int x)

{

if (x==1) return “민트초코프라푸치노”;

else return “밍굥쯔 커피”;

}

int main()

{

const char* x;

x= vending(1);

printf(%s\n , x);

return 0;

}

함수를 만드는 것 = 함수 정의

함수 사용 = 함수 호출

함수를 호출할 때에는 함수 괄호 안의 argument를 개수만큼 써야함

argument가 없을 때는 빈 괄호만 쓰면 됨

----

함수의 정의와 선언, 호출

함수 정의를 선언 자리에 해도 문제 없지만 좋은 방법은 아니다.

선언 – 호출 –정의

재귀(recursive)함수 = 함수가 함수 내에서 자기 자신을 호출 하는 것

실매개변수 = argument = 함수를 호출할 때 사용하는 매개변수

형식매개변수 = parameter = 함수 정의에서 사용하는 매개변수

매개변수를 전달하는 방법

값에 의한 호출(call by value)

= 실매개변수의 값을 형식매개변수로 전달

주소에 의한 호출(call by reference)

= 실매개변수의 주소를 형식매개변수로 전달

C언어는 기본적으로 값에 의한 호출(call by value)

반복되는 부분은 함수로 구현

헤더파일 만들어서 모듈화 가능

지역변수와 전역변수 = 선언위치에 따라서 결정

지역변수 = 해당 함수나 블록 내에서만 사용할 수 있다.

전역변수 = 소스 전체에서 사용 할 수 있다.

자료형과 기억클래스

자료형 = 자료의 크기 결정 =int, char, float, double

기억 클래스 = 자료의 기억 위치 (메모리의 종류)

= 스택, data영역, CPU의 레지스터 등

= auto, static, extern, register

기억 클래스 – 자동(auto)

가장 많이 사용하는 기억 클래스

함수나 블록 내부에서 선언 / 블록을 벗어나면 사라짐

auto는 생략 가능 / 지역변수

초기화는 실행시 이루어지고, 초기화를 하지 않으면 임의의 값(쓰레기 값)을 가짐

기억 클래스 – 정적(static)변수

프로그램이 종료될 때까지 값을 유지

처음 실행시 한번만 초기화 / 초기화 값이 없으면 0으로 초기화

지역 static변수는 해당 블록 내에서만 접근 가능

전역변수는 기본적으로 static 이므로 static 키워드 필요 없음

----

구조체

숫자를 저장: int, double

문자를 저장: char

문자열 저장: char*, char배열

struct 구조체 이름{

char ~;

int ~;

doble~;

~;

};

변수: int x; = 4바이트짜리 단독주택 1가구

배열: int x[5] = 4바이트짜리 주택 5가구 / 동일한 형의 데이터들을 하나의 단위로	취급

구조체(변수/배열/구조체들의 모임) = 다른 형의 데이터들을 하나의 단위로 취급

C구조체 (변수들의 모임) => C++클래스 (변수 + 함수들의 모임)

C구조체: 변수의 모임 //C++구조체: 변수와 함수의 모임 (클래스와 다르다.)

C++ 언어에서는 struct를 생략하고 구조체명과 변수명만 써도 됨

구조체 틀을 만들 때 구조체 이름을 생략할 수도 있지만 거의 사용하지 않음(X)

구조체 변수가 자신의 멤버를 접근하기 위해서는“.”이나 “->”연산자를 사용

일반 구조체 변수의 멤버 접근

구조체_변수.멤버명;

점 연산자, 도트 연산자, 지정 연산자, 멤버 지정 연산자

구조체 포인터 변수의 멤버 접근

구조체_포인터_변수->멤버명;

화살표 연산자, 간접 멤버 연산자

구조체 선언과 typedef 으로 구조체명을 임의로 지정할 수 있다.

= typedef 기존형 새로운 형 이름;

객체지향 프로그래밍

=실세계를 반영하는 프로그래밍

캡슐화, 상속성, 다형성

C문법을 포합하고 있지만 프로그래밍 스타일은 완전히 다름!

객체 지향 프로그래밍

구조적 프로그래밍 기법을 계승하고 보다 발전시킨 개념

자료와 처리동작을 하나로 묶어 다루는 객체 개념 도입

객체는 자료와 이를 처리하는 동작인 연산(함수, method)을 하나로 묶어 만든 요소

인스턴스는 객체와 같음

클래스는 객체의 타입이다.

클래스는 객체들의 공통적인 특성을 모아 놓은 것, 설계도

객체는 자신이 상태와 행동, 이름을 가지고 있는 것, 집

클래스로 캡슐화

클래스로 추상 자료형(ADT: Abstraction Data Type)을 지원

상속: 파생 클래스가 기본 클래스의 정의된 속성(자료 및 연산)을 상속받는 것

파생 클래스, 자식 클래스: 상위 클래스의 속성을 상속받은 하위 클래스

기본 클래스, 부모 클래스: 상위 클래스

상속을 이용하면 기조 프로그램의 재사용이 수월하여 프로그램의 개발비용과 복잡도를 줄일 수 있음.

파생 클래스를 사용하면 자료형의 계층화도 가능

상위 클래스일수록 일반화된 클래스

하위 클래스일수록 세분화, 구체화 된 클래스

다형성(polymorphism)

- poly + morph: 많은 형태

하나의 함수 이름(함수 중첩)이나 연산자(연산자 중첩)을 여러 목적으로 사용

그림을 그리는 언어: UML(Unified Modeling Language)

클래스 이름

멤버변수 (특성)

멤버함수 (행위)

클래스 선언 / 객체 정의

클래스 멤버의 접근권한 – 클래스 외부에서 멤버에 접근할 수 있는 권한

전용(private)

- 해당 클래스 내부에서만 접근 가능 / 디폴트 속성으로 생략 가능

범용(public)

어디서나 접근 가능

보호(protected)

private이지만 자식에게는 접근할 수 있음

const char* = string // string을 쓸 때는 using namespace std;를 써야한다.

멤버함수의 선언과 정의

- 실제 함수를 사용하기 위해서는 멤버함수에 대한 정의가 필요

멤버함수를 정의하는 2가지 방법

클래스 안에서 정의 / 클래스 밖에서 정의

클래스의 안에서 정의하는 경우는 잘 사용하지 않는다.

객체의 멤버 호출

직접참조연산자: . / 간접참조연산자: ->

범위지정연산자: ::

#include <iostream>

using namespace std; // 잘 사용하지 않음

using std::cout; // 더 좋은 방법

using std:endl;

namespace: 모든 식별자(변수,함수 등의 이름)가 유일하도록 보장하는 코드 영역을 정의

ex) AA::add(1, 2) = namespace가 AA인 곳의 add함수를 호출한다.

BB::add(1, 2) = namespace가 BB인 곳의 add함수를 호출한다.

::add(1, 2) = 전역 namespace인 곳(프로그램 내부에 선언된) add함수를                        호출한다

멤버함수를 클래스 외부에서 정의

리턴형 클래스명::멤버함수명(매개변수 리스트)

정수 클래스

inline 함수

컴파일러에 의해 처리되며 텍스트가 아닌 함수 코드 블록의 복사본인 기계어 코드가 직접 삽입된다.

inline 리턴형 함수명(매개변수 리스트)

자동 inline 함수

멤버함수가 클래스 내부에서 정의되면 자동적으로 inline 함수가 된다.

----

private: 외부에서 접근 불가

public: 외부에서 접근 가능

배열

변수: 단독주택

배열: 같은 평수로 구성된 아파트

일차원 배열: 자료형 배열명 [첨자] / 배열 원소는 0부터 시작