/Cpp-study-blog

🏫 λΆ€μ‚°λŒ€ν•™κ΅ γ€ŽC++ ν”„λ‘œκ·Έλž˜λ°κ³Ό μ‹€μŠ΅γ€ 2021λ…„ 2ν•™λ…„ 1ν•™κΈ°

Primary LanguageC++

🎑 Cpp-study-blog

λΆ€μ‚°λŒ€ν•™κ΅ 2ν•™λ…„ 1ν•™κΈ° 채ν₯석 κ΅μˆ˜λ‹˜μ˜ γ€ŽC++ν”„λ‘œκ·Έλž˜λ°κ³Όμ‹€μŠ΅γ€ κ°•μ˜μ˜ μ‹€μŠ΅ λ‚΄μš©μ„ μ •λ¦¬ν•œ μ €μž₯μ†Œμž…λ‹ˆλ‹€.

πŸ“Œ C++ 을 톡해 객체 지ν–₯의 κ°œλ…μ„ μ΄ν•΄ν•˜κ³ , C++ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°œλ°œμ„ ν•©λ‹ˆλ‹€.

πŸ“ 1

c++ 에 λŒ€ν•œ 기초 ν”„λ‘œκ·Έλž˜λ°μ„ ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) cin, cout
(2) while, if

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. 이름과 점수(μ •μˆ˜)λ₯Ό μž…λ ₯ λ°›μ•„μ„œ 등급을 좜λ ₯ν•œλ‹€.
2. 음수 λ˜λŠ” 100 초과 값이 μž…λ ₯되면 ν”„λ‘œκ·Έλž¨μ€ μ’…λ£Œλœλ‹€.

🌷 μ œμ•½ 쑰건

1. C++ μ–Έμ–΄μ—μ„œ μž…/좜λ ₯ 지원을 μœ„ν•œ cinκ³Ό cout을 μ‚¬μš©ν•œλ‹€.

πŸ“ 2

Type에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) Built-in types
(2) string
(3) numeric_limits<T>

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. νƒ€μž…μ΄λ¦„μ„ λ¬Έμžμ—΄λ‘œμ„œ μž…λ ₯λ°›μ•„μ„œ 각 νƒ€μž…μ΄ ν‘œν˜„ν•  수 μžˆλŠ” μ΅œμ†Œκ°’κ³Ό μ΅œλŒ€κ°’μ„ 좜λ ₯ν•œλ‹€. (μ΄λ•Œ, λŒ€μ†Œλ¬Έμžλ₯Ό ꡬ뢄 X)
2. μœ„ 과정은 반볡적으둜 μˆ˜ν–‰λœλ‹€.
3. β€œquit” λ¬Έμžμ—΄μ΄ μž…λ ₯되면 λ°˜λ³΅λ¬Έμ€ μ’…λ£Œλœλ‹€.
4. 반볡문이 μ’…λ£Œλ˜λ©΄ 각 νƒ€μž… λ³„λ‘œ μ‹€μ œλ‘œ μž…λ ₯된 횟수λ₯Ό 좜λ ₯ν•œλ‹€.

🌷 μ œμ•½ 쑰건

1. C++ μ–Έμ–΄μ—μ„œ μž…/좜λ ₯ 지원을 μœ„ν•œ cinκ³Ό coutλ₯Ό μ‚¬μš©ν•œλ‹€.
2. λ¬Έμžμ—΄μ€ C++의 string을 μ΄μš©ν•œλ‹€.
3. numeric_limits<T>λ₯Ό μ΄μš©ν•œλ‹€.

πŸ“ 3

Type에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) new, delete

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

점수λ₯Ό μž…λ ₯ λ°›κ³ , 합계, 평균을 κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.
1. μ΅œλŒ€ μž…λ ₯ κ°€λŠ₯ν•œ 점수의 개수λ₯Ό μž…λ ₯ λ°›λŠ”λ‹€.
2. β€œadd” λͺ…λ ΉμœΌλ‘œ 점수λ₯Ό μž…λ ₯ν•œλ‹€.
3. β€œsum” λͺ…λ ΉμœΌλ‘œ 합계λ₯Ό 좜λ ₯ν•œλ‹€. 
4. β€œaverage” λͺ…λ ΉμœΌλ‘œ 평균을 좜λ ₯ν•œλ‹€. (단 μž…λ ₯된 μ μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” β€œ1개 μ΄μƒμ˜ μ μˆ˜κ°€ μž…λ ₯λ˜μ–΄μ•Ό ν•œλ‹€β€λ₯Ό 좜λ ₯ν•œλ‹€.)
5. β€œlist” λͺ…λ ΉμœΌλ‘œ μž…λ ₯ μˆœμ„œλŒ€λ‘œ 점수λ₯Ό 좜λ ₯ν•œλ‹€.
6. β€œquit” λͺ…λ ΉμœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œμ‹œν‚¨λ‹€.

🌷 μ œμ•½ 쑰건

1. new와 deleteλ₯Ό μ΄μš©ν•΄μ„œ μ μˆ˜λ“€μ„ μ €μž₯ν•  λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•œλ‹€.
2. β€œadd”, β€œsum”, β€œaverage”, β€œquit”은 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠλŠ”λ‹€.
3. μ μˆ˜λŠ” 0λΆ€ν„° 100μ‚¬μ΄μ˜ μ •μˆ˜μ΄λ‹€. λ§Œμ•½ 이 λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ©΄ β€œScore should be between 0 and 100οΌ‚λ₯Ό 좜λ ₯ν•œλ‹€.
4. μ§€μ •ν•œ 개수 초과의 μ μˆ˜κ°€ μž…λ ₯되면  β€œToo many scores”λ₯Ό 좜λ ₯ν•œλ‹€.

πŸ“ 4

Type, control structure, function 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) struct
(2) vector, iterator

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. μ΅œλŒ€ μž…λ ₯ κ°€λŠ₯ν•œ μ‚¬λžŒ 수λ₯Ό μž…λ ₯ λ°›λŠ”λ‹€.
2. 이름, κ΅­μ–΄, μ˜μ–΄, μˆ˜ν•™ 성적을 μž…λ ₯ν•œλ‹€.
3. μž…λ ₯ 받을 μ‚¬λžŒ 수만큼 λ‹€ μž…λ ₯이 되고 λ‚˜λ©΄, total 순으둜 좜λ ₯ν•œλ‹€. 
4. 이 λ•Œ, 각 μ‚¬λžŒμ˜ total κ°’κ³Ό 평균 값을 λͺ¨λ‘ 좜λ ₯ν•œλ‹€. 

🌷 μ œμ•½ 쑰건

vector<StudentInfo>
// vector<StudentInfo> μ°Έκ³ .
const int SUBJECT_NO = 3 ;

struct StudentInfo {
	string name ;
	int scores[SUBJECT_NO] ;
	int sum ;
	float average ;
} ;
1. vector<StudentInfo> λ₯Ό μ‚¬μš©ν•œλ‹€.
2. StudentInfoλ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•œλ‹€. 
3. vector<StudentInfo>λ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•œλ‹€.
4. iteratorλ₯Ό μ‚¬μš©ν•œλ‹€. 

πŸ“ 5

ν•¨μˆ˜ 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) enum,struct
(2) function call
(3) const parameter
(4) Call by reference
(5) const_iterator

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. ADDλ₯Ό μ‚¬μš©ν•˜μ—¬ μ§μ‚¬κ°ν˜•μ˜ κ°€λ‘œμ™€ μ„Έλ‘œλ₯Ό μž…λ ₯λ°›λŠ”λ‹€.
2. PRINTλ₯Ό μž…λ ₯ν•˜λ©΄ λͺ¨λ“  μ§μ‚¬κ°ν˜•λ“€μ„ 좜λ ₯ν•œλ‹€.
3. SORTλ₯Ό μž…λ ₯ν•˜λ©΄ μ§μ‚¬κ°ν˜•μ˜ 넓이 순으둜 좜λ ₯ν•œλ‹€.
4. CLEARλ₯Ό μž…λ ₯ν•˜λ©΄ μ§μ‚¬κ°ν˜•λ“€μ΄ λͺ¨λ‘ μ‚­μ œλœλ‹€.
5. EXIT을 μž…λ ₯ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλœλ‹€.

🌷 μ œμ•½ 쑰건

Rectangle ꡬ쑰체
struct Rectangle {
	int width ;
	int height ;
} ;
CommandKind enum
enum CommandKind { ADD, SORT, PRINT, CLEAR, EXIT, INVALID} ;
1. Rectangle ꡬ쑰체와 CommandKind enum을 μ‚¬μš©ν•œλ‹€. 

πŸ“ 6

ν•¨μˆ˜ 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) enum,struct
(2) function call
(3) const parameter
(4) Call by reference
(5) const_iterator

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. School 클래슀 μ•ˆμ˜ addStudent(학생) ν•¨μˆ˜λ‘œ 학생을 μΆ”κ°€ν•©λ‹ˆλ‹€. 
2. School 클래슀 μ•ˆμ˜ print() ν•¨μˆ˜λ‘œ 학생을 좜λ ₯ν•˜κ³ , 
3. School 클래슀 μ•ˆμ˜ sort() ν•¨μˆ˜λ‘œ μ μˆ˜λ³„λ‘œ 학생을 좜λ ₯ν•©λ‹ˆλ‹€. 
4. School 클래슀 μ•ˆμ˜ findStudentWithName(이름) ν•¨μˆ˜λ‘œ 학생을 μ°Ύμ•„ λ¦¬ν„΄ν•©λ‹ˆλ‹€. 
4. Student 클래슀 μ•ˆμ˜ setGPA(점수) ν•¨μˆ˜λ‘œ ν•™μƒμ˜ 점수λ₯Ό λ„£μŠ΅λ‹ˆλ‹€. 
5. Student 클래슀 μ•ˆμ˜ setName(이름) ν•¨μˆ˜λ‘œ ν•™μƒμ˜ 이름을 λ„£μŠ΅λ‹ˆλ‹€. 

🌷 μ œμ•½ 쑰건

Student ν΄λž˜μŠ€μ™€ School 클래슀
class Student {
private:
	string name ;
	float gpa ;

public:
	…
} ;

class School {
private:
	string schoolName ;
	vector<Student> students ;

public:
	…
} ;
1. Student와 School 클래슀λ₯Ό μ •μ˜ν•œλ‹€. 

πŸ“ 7

클래슀 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) class constructor & destructor

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1.  MyString 클래슀의 μƒμ„±μžμ™€ μ†Œλ©Έμžλ₯Ό 톡해 κ΅¬ν˜„ν•©λ‹ˆλ‹€. 
2.  MyString 클래슀의 isEqual(λ¬Έμžμ—΄) ν•¨μˆ˜λŠ” ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ 같은지 νŒλ‹¨ν•©λ‹ˆλ‹€. 
3.  MyString 클래슀의 print() ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

🌷 μ œμ•½ 쑰건

MyString 클래슀
class MyString {
	char* str ;
	int size ;
public:
	MyString(const char* const s) …
} ;
1. MyString 클래슀λ₯Ό μ •μ˜ν•œλ‹€. 

πŸ“ 8

μ˜€νΌλ ˆμ΄ν„° μ˜€λ²„λ‘œλ”©μ— λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) operator overloading

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. cin 으둜 matrixλ₯Ό μž…λ ₯λ°›μŠ΅λ‹ˆλ‹€.
2. + μ—°μ‚°μžλ‘œ matrix λ‘κ°œλ₯Ό λ”ν•©λ‹ˆλ‹€.
3. * μ—°μ‚°μžλ‘œ μƒμˆ˜μ™€ matrixλ₯Ό κ³±ν•©λ‹ˆλ‹€.
4. cout으둜 matrixλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

🌷 μ œμ•½ 쑰건

Matrix 클래슀
class Matrix {
	int** values ;
	int row, column ;
public:
	…
} ;
1. Matrix 클래슀λ₯Ό μ •μ˜ν•œλ‹€. 

πŸ“ 9

상속에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) inheritance

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. cout으둜 Employee λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
2. Manager 클래슀의 addEmployee ν•¨μˆ˜λ‘œ 직원을 λ„£μŠ΅λ‹ˆλ‹€.
3. cout으둜 Manager λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 

🌷 μ œμ•½ 쑰건

EmployeeLevel enum
enum EmployeeLevel { 사원, λŒ€λ¦¬, κ³Όμž₯, μ°¨μž₯, λΆ€μž₯} ;
Employee ν΄λž˜μŠ€μ™€ 이λ₯Ό 상속 λ°›λŠ” Manager 클래슀
class Employee {
	string name ;
	const EmployeeLevel level ;
public:
	…
} ;

class Manager : public Employee {
  vector<Employee*> group ;
public:
  …
} ;
1. enum EmployeeLevelλ₯Ό μ •μ˜ν•œλ‹€. 
2. Employee ν΄λž˜μŠ€μ™€ 이λ₯Ό 상속 λ°›λŠ” Manager 클래슀λ₯Ό μ •μ˜ν•œλ‹€.

πŸ“ 10

Polymorphism 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) Polymorphism

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ
상속

1. λ„ν˜•μ„ μ €μž₯ν•˜κ³  좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

🌷 μ œμ•½ 쑰건

enum Color와 Shape 클래슀
enum Color {RED, BLUE, YELLOW} ;

class Shape {
	Color lineColor ;
public:
	Color getLineColor() const { return lineColor ; }
	virtual Shape* clone() const = 0 ;
	virtual void print() const = 0 ;
	virtual float getLength() const = 0 ;
} ;
1. enum Colorλ₯Ό μ •μ˜ν•œλ‹€. 
2. Shape 클래슀λ₯Ό μ •μ˜ν•œλ‹€.

πŸ“ 11

더 λ§Žμ€ topic 듀에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) class, vector, inheritance

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. ItemList 에 CPU λͺ…κ³Ό 정보듀을 넣을 수 μžˆμŠ΅λ‹ˆλ‹€.
2. ItemList 클래슀의 addItem ν•¨μˆ˜λ‘œ CPU 정보λ₯Ό λ„£μŠ΅λ‹ˆλ‹€.
3. ItemList 클래슀의 removeItem ν•¨μˆ˜λ‘œ CPU 정보λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€. 
4. ItemList 클래슀의 print() ν•¨μˆ˜λ‘œ CPU 정보λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

πŸ“ 12

Template class 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) Template class

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. List클래슀의 addν•¨μˆ˜λŠ” μ›μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
2. List클래슀의 find(λ¬Έμžμ—΄)ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ΄ μΌμΉ˜ν•˜λ©΄ trueλ₯Ό λΆˆμΌμΉ˜ν•˜λ©΄ falseλ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.  

πŸ“ 13

Exception Handling 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) Exception Handling

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. StackException에 λŒ€ν•œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•©λ‹ˆλ‹€. 
2. destructor, copy constructor, assignment operatorλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.
3. μŠ€νƒμ˜ pop(), push(), print()λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.

πŸ“ 14

namespace 에 λŒ€ν•΄ 배우고, 그에 λŒ€ν•œ μ‹€μŠ΅μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

🌷 ν‚€μ›Œλ“œ

(1) namespace

🌷 ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ‹€ν–‰ μ˜ˆμ‹œ

1. μ§μ‚¬κ°ν˜•, 원을 μž…λ ₯ λ°›κ³  좜λ ₯ν•©λ‹ˆλ‹€. 
2. addElement ν•¨μˆ˜λ‘œ λ„ν˜•μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.
3. getElement ν•¨μˆ˜λ‘œ λ„ν˜•μ„ 좜λ ₯ν•©λ‹ˆλ‹€.
4. removeElement ν•¨μˆ˜λ‘œ λ„ν˜•μ„ μ‚­μ œν•©λ‹ˆλ‹€.