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 자동으로 배정

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)

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
구조체: 여러가지 변수들을 담아서 사용할수있음

구조체에 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)) 이런식으로 구조체 포인터도 가능

-> 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로 사용

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

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


getters(접근자), setters(설정자)를 이용해서 접근과 설정 가능하다
ex) def setName() <- setters임
Const 함수: 비 const함수 호출x, constantized된 object만 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 함

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 식으로 표현함

* protected: 선언한 클래스내부+상속받은 자식 사용가능 (private는 상속받은거는 불가)
Overloading: 함수 중복정의, 받는 인수에 따라서 구별함
Overriding: 함수재정의, 부모 class의 함수를 자식 class의 함수로 재정의해서 사용




#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에 의해서)


Pure virtual function : 선언은 지금 하지만 나중에 정의하도록 놔둠, =0 꼭 붙여야댐 ex) virtual void talk()=0;
부모 class의 destructor가 virtual이 아니면 자식 class destructor 호출x > 메모리 leak 생김

** 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 |
