Cute Poka Dotted Sky Blue Bow Tie Ribbon
2025-10-27 15:19:49

W2

Variable:데이터 저장한 메모리 주소의 이름

bytes: int(4), float(4), long(4), long long(8), double(8), char(1), bool(1)

operator: a?b:c(conditional), a,b(comma, ex: a=(b=3,b+2)) ...

auto: 변수 type 자동으로 배정

num2 > 맨 마지막 10249위치에 이진수로 5저장, num2도 동일

C프로그램 run할때 os가 memory공간 할당방식

: code segment에서 프로그램 이진코드 컴파일, datasegment에 전역,static변수 저장, heap으로 dynamic memory할당, stack으로 local변수, 함수 parameter, 주소 return 함

 

array이름은 array의 시작주소 (arr=&arr[0]), arr에 새로운 주소 할당 불가!!(arr=&new 이런거 안됨)

맨처음 배열선언할때만 ={a,b,c}방식으로 초기화 가능, 선언한 이후에는 불가. a배열=b배열 이런거 안됨(복사x) 

고정길이 char배열일때 남은 공간은 '\0'로 채움, 가변길이일때는 현재 문구+마지막에 '\0' 추가

string은 마지막에 꼭 '\0'들어가야함!! , '\0'이 string의 끝이라고 판단함

string은 char str[]="mungu" (가변, 각 원소 접근후 변경가능)/ char* str="mungu" 이 두가지 방식으로 설정가능

const char* a = "aa" > 고정, 문자 전체를 가리키므로 원소 하나하나변경 x, 새로운 string 주소 할당해서 변경해야댐 

const int : 값 변경 x

const int* : 주소 변경 x

 

이중 포인터 작동구조

string으로 문자열 만들면 str1=str2이런거 가능함

 

-string 함수들-

==, !=,<,<=..., +=,+ 사용가능 

-find("문자열", string) > index return

-substr(시작,끝) 시작~끝까지 string return

-replace(시작,끝,"대체할문자열")

-insert(위치,"문자열) >위치에 문자열 삽입

 

getline(istream& is, string str): 입력 가능한 최대 문자 수를 지정하지 않아도 됨, 지정한 delimiter를 만나기 전까지 모든 문자를 읽어서 string 객체에 저장 . '\n'은 저장 x 대신 길이정해졌을때 거기까지 '\0'저장, 20으로 길이 저장해둿으면 마지막은 무조건 '\0'이라 사실상 19까지만 받을수있음

 

do{코드}while(조건)

 

 W3

구조체: 여러가지 변수들을 담아서 사용할수있음

타입명 설정하는 방법 3가지

구조체에 int a,b있다고 치면 구조체 p1={10,20} 이런식으로 초기화 가능

구조체 배열도 가능

구조체 a, 구조체*aa=&a  >>일때 (*aa).x=10 (값 자체를 가르키게할때 aa->x=10 이런식으로도 가능!!

call-by-reference 인수로 쓸수있는데 구조체 내부 파라미터 변경하기 싫으면 const 구조체명* 로 보내면됨

c++에선 구조체 안에 member함수 넣을수있음, public/private같은거 설정할수있음 (c에선 다 public)

private인거 접근하려면 public에 접근용 함수있어야함

**class에선 private이 default임**

 

namespace:구조체나 class랑 비슷하게 사용

여기서 using namespace first_space; 하면 이제 func 은 first_space에 있는거로 자동으로 써짐

 

Function Overloading : 같은 이름의 함수지만 인수가 달름

ㄴ함수 인수랑 안맞으면 일부 변경해서 맞게 끼워넣을수도 있음 ex) double>int

void 함수명(int a=1, int b=2) 이런식으로 default값 설정해둘수도있음

ㄴ 함수명(1) 이런식으로하면 b는 알아서 채워짐 근데 그냥 함수명() 이러면 오류남 하나라도 써야댐

 

W4

동적할당된 데이터는 heap에 저장됨

int* 이름 = (int*) malloc(sizeof(int)*크기)

free(이름) :할당해제, 누수안날라면 해야댐 (c++에선 delete도 가능!)

int ** 이름=(int**)malloc(sizeof(int*)*크기) :2차원 동적배열

 

point* a= (point*)malloc(sizeof(point)) 이런식으로 구조체 포인터도 가능 

C++에선 이런것도 됩니다 주로 이렇게 함

-> point* a= new point; delete a; 이런식으로!!

int *변수=&a : a주소 ,초기화 안해도 상관x, 재할당가능,null object 가리킬수있음 

int &변수=a : a의 참조자 생성, 무조건!! 초기화 되어야함, 재할당불가, null 불가

call-by-reference(변경가능)일때 *로 받아도되고(주소를받음) &로 받아도댐(기본으로 받음)

read only인 const일때도 &사용 가능, 호출후에 변경불가임  const니까

 

Compiler는 외부 함수나 변수의 type만 알면됨, #include 로 불러올수있음

.h : 헤더파일, 함수이름이나 return type같은것만 저장

.cpp : 소스파일, 함수 실제 body 구현함

 

Makefile 쓰는법:

구조에 맞게 만들기

W5-6

OOP(객체지향프로그래밍)

Object는 state(상태)랑 Behavior(행동함수) 가짐

Instance: 각 Class에서 만들어진 object (class=type, instance=변수 정도로 생각) ,같은 class로 여러개의 object,instance 만들수있음 (구조체랑 비슷..)

*Python에서 class안 method의 첫번째 parameter는 무조건 self여야함

Class member function은 외부파일에서 정의되어도 ㄱㅊ, .operator로 사용

외부에서 class 정의내림 #include를 썼다

A::B > Class A안에 B가 있다는뜻

inline 함수: compile할때 그냥 쓰인대로 대체하게해줌(치환) 쓸데없이 함수부르고 주소return하면서 overhead발생하는거 줄임

이런식으로 inline함수를 써서 class함수를 밖에서 정할수도 있다!!

Encapsulation: class에서 구현 detail숨기고 공통 interface만 밖으로 보이게함

이런식으로 class안에 __age 접근불가, private 써도 ㄱㅊ

getters(접근자), setters(설정자)를 이용해서 접근과 설정 가능하다

ex) def setName() <- setters임

 

Const 함수: 비 const함수 호출x, constantized된 object만 const 호출가능

그냥 get_n 은 const가 아니라서 아니되오

Constructor(생성자):object를 만들고 초기화하는 멤버함수. class명이랑 이름 같고 return없음. 만약 유저가 define안했으면 compiler가 암시적으로 생성자 만들음, 여러개의 생성자 가능(overloading)

Member initializer list: 

클래스명* p = new 클래스명 : 공간 할당하고 클래스의 기본생성자로 initialize함

클래스명* p = new 클래스명(인수) : 공간할당하고 인수에 맞는 생성자로 initialize함

Destructor : ex) stock::~stock() , 인수받는거없고 return type도 없음, 안에서 delete[] 이런거해서 할당해제해줌 

this-> : 지금 있는 class의 멤버변수 가리킴 , return *this 하면 지금거 그대로 return 함

s.total_val은 받아온거고 그냥 total_val은 기존에 있던거

W7

OOP 원칙

1. Encapsulation (캡슐화) : 한 class에 여러가지 method 들어있음 + data hide가능

2. Inheritance (상속) : 자식은 부모 class의 행동, 특징 똑같이 받음 , Is - a relationship ( a car is a vehicle 느낌)

3.Polymorphism (다형성) : 같은 이름의 메서드가 객체에 따라 다른 동작을 수행

4. Abstraction (추상화) : 필요하고 공통적인 부분만 추출함 (ex. 자동차, 트럭에서 시동거는 기능같은거)

 

상속 : 

B(부모, base, super class)가 A(자식,sub class)에게 상속해줌 > class A implicitly has the member variables and functions of class B 

 

UML : +(public), -(private), #(protected) , variable: data type, method(parameter) : return type 식으로 표현함

vehicle:부모, car이랑 truck이 vehicle 상속받음

* protected: 선언한 클래스내부+상속받은 자식 사용가능 (private는 상속받은거는 불가)

 

Overloading: 함수 중복정의, 받는 인수에 따라서 구별함

Overriding: 함수재정의, 부모 class의 함수를 자식 class의 함수로 재정의해서 사용

vehicle의 getweight로 갔다가 overriding에 의해 car의 getweight로 가서 car거가 return됨

 

순서를 알아두자...
위의 순서에 기반한 예시... 잘 알아두자
sphere의 생성자는 암시적으로 circle의 **기본생성자** 호출함!! (없으면 걍 내려오겟죠...) 그후에 sphere 생성자 작동함 ***

#ifndef AAA : AAA가 이미 있는게 아니면 아래 실행

#define AAA ~ #endif : 아래 내용을 정의내림

여러개 상속받을수도 있음( ambiguous 문제가 있음, 되도록 피하는게 좋다)

 

W8

객체 포인터 ex) Circle *p=a 했을때 a의 함수에 접근하려면 -> 사용!! p->함수() 이런식

객체배열 ex) Circle arr[3] , arr[0].함수() 이런식으로 접근가능, 배열이름을 포인터로 써서 (arr+i)->함수() 같은 방식도 가능

Object Slicing : 자식class로 설정한걸 부모class에 할당하면 자식의 멤버 사용못함 *자식 class pointer는 부모 class 못가리킴!!!

 

virtual function : runtime동안 컴파일러가 동적바인딩(actual type에 의해서)함. 걍 간단하게 말해서 지금!! 가리키는 객체에 있는 함수를 사용함 

기본은 정적바인딩임 (compile time동안 declared type에 의해서)

virtual 설정안하면 car가 아니라 상위의 vehicle이 이용됨
virtual 설정안해서 talk가 student거가 아니라 person게 실행됨

Pure virtual function : 선언은 지금 하지만 나중에 정의하도록 놔둠, =0 꼭 붙여야댐 ex) virtual void talk()=0;

부모 class의 destructor가 virtual이 아니면 자식 class destructor 호출x > 메모리 leak 생김

부모 destructor virtual로 만들기~

** Constructor(생성자)는 virtual 안됨!!!

자식object를 부모 object로 복사하기 : 부모& 이름 = 자식; 이런식으로 ㄱㄱ (polymorphism 이용) 

 

 

'공부 > 학교' 카테고리의 다른 글

데사 중간 정리  (0) 2026.04.16
창소프 기말 정리  (0) 2025.12.15
데베응 기말 정리  (0) 2025.11.28
지금까지 한거 정리  (0) 2025.10.19
자료구조 중간고사 함수 정리  (0) 2025.04.22