C++ 프로그래밍 58

[C++ 기초 문법] 상속(Inheritance) 기본, 파생 클래스

상속(Inheritance) 기본, 파생 클래스 상속(Inheritance)? ① 기존의 클래스에 새로운 기능을 추가할 수 있다 ② 클래스가 나타내고 있는 데이터에 다른 것을 더 추가할 수 있다 ③ 클래스 메서드가 동작하는 방식을 변경할 수 있다 [time.h] #include #ifndef TIMEH #define TIMEH class Time //기초 클래스 { private: int hours; int mins; public: Time(); Time(int, int); void addHours(int); void addMins(int); Time sum(Time&); //Time 클래스를 return하는 함수 sum의 원형 제공 void show(); ~Time(); }; #endif 위 헤더파일에..

[C++ 기초 문법] friend

friend friend 는 마치 친구처럼 수평적인 관계로 클래스간의 멤버 변수를 공유하기 위해 사용된다. 그렇기 때문에 friend를 활용하면, 자신뿐만 아니라 다른 타입의 클래스에도 접근하는 것이 가능해져 코드의 확장이 용이해진다. 다만, 클래스 내부에서만 써야할 멤버들이 다른 곳에서 계속 활용된다면, 데이터 보호가 어려울 뿐만 아니라 캡슐화를 지향하는 객체지향적인 설계가 어려우므로 꼭 필요한 곳에서만 활용하는 것이 좋다. [time.h] #include #ifndef TIMEH #define TIMEH class Time { private: int hours; int mins; public: Time(); Time(int, int); void addHours(int); void addMins(int..

[자료구조와 알고리즘] 알고리즘의 개요

알고리즘의 개요 알고리즘(Algorithm) 주어진 문제를 해결하기 위한 잘 정의된 동작들의 유한집합 자료구조(Data Structure) - 알고리즘의 객체 - 구조화되고 조직화된 자료의 저장/추출/관리 방법 - 추상데이터유형 (Abstracted Data Type) - 배열,스택,큐,트리... ※ 알고리즘 선택 시 고려사항 ① 하나의 문제에 대해 여러 알고리즘이 존재할 수 있다 ② 절대적인 최상의 알고리즘은 없다 ③ 주어진 문제와 환경을 먼저 숙지한다 ④ 속도와 자원(resource)의 상관관계에 유의한다 ⑤ 단순한 알고리즘을 지향한다 ⑥ 지나친 속도결벽증은 금물이다 ⑦ 알고리즘의 사용빈도에 따라 알고리즘을 선택한다 알고리즘의 예: 두 정수의 곱셈 ① 전통적인 방식의 곱셈 기본연산 : 임의의 정수 X..

[자료구조와 알고리즘] C++ 로 배우는 자료구조와 알고리즘

C++로 배우는 자료구조와 알고리즘 강의 목차 ◇ 알고리즘의 개요 ◇ C++언어 Review ◇ 기본 자료구조 ◇ 재귀호출 ◇ 정렬 알고리즘 ◇ 검색 알고리즘 ◇ 그래프 알고리즘 ◇ 수치해석 ◇ 스트링 알고리즘 ◇ 알고리즘 개발 방법론 ◇ 알고리즘 실무 ※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다. https://inf.run/LNCU

[C++ 기초 문법] 연산자 오버로딩

연산자 오버로딩 이전에 알아본 함수의 오버로딩이란 것의 의미는 "여러 개의 함수를 같은 이름으로 연결하는 것"이었다. 연산자 오버로딩 또한 이와 유사하다. 이번 글에서는 직접 작성한 Class객체에 기본연산자인 + 를 오버로딩하는 코드를 작성해 볼 것이다. ① [time.h]에 Time 클래스 선언 및 함수 sum 원형 제공 아래와 같이 Time 클래스를 선언한 time.h 헤더파일의 퍼블릭 멤버에, Time 클래스끼리의 합산값을 출력해주는 함수 sum의 코드를 작성해 볼 것이다. #include #ifndef TIMEH #define TIMEH class Time { private: int hours; int mins; public: Time(); Time(int, int); void addHours(..

[C++ 기초 문법] 클래스 Array와 *this

클래스 Array 와 *this 아래 헤더파일에, Array 형태의 Stock 클래스 중 share_val의 값이 최대인 클래스를 출력하는 코드를 추가해보자. #ifndef STOCK #define STOCK #include using namespace std; class Stock { private: string name; int shares; float share_val; double total_val; void set_total() { total_val = shares * share_val; } public: void buy(int, float); void sell(int, float); void update(float); void show(); Stock(string, int, float); St..

[C++ 기초 문법] 클래스 생성자와 파괴자

클래스 생성자와 파괴자 아래와 같은 헤더파일에서, public 멤버의 함수인 acquire을 사용하지 않고 바로 Stock 클래스를 선언하려면 어떻게 해야할까? [stock.h] #ifndef STOCK #define STOCK #include using namespace std; class Stock { private: //비공개 멤버,클래스 내에서만 접근 가능 string name; int shares; float share_val; double total_val; void set_total() { total_val = shares * share_val; } public: //공개 멤버, 클래스 외부에서도 접근 가능 void acquire(string, int, float); void buy(int,..

[C++ 기초 문법] 추상화와 클래스

추상화와 클래스 추상화란? 어떤 객체를 사실적으로 표현하는 것이 아니라, 공통된 특징을 일정한 방식으로 이해하기 쉽게 표현하는 것이다 클래스란? 추상화를 사용자 정의 데이터형으로 변환해주는 수단이다 데이터형이란? 데이터형을 대상으로 어떠한 연산을 수행할 수 있는지 알 수 있다 private형 멤버와 public형 멤버를 가진 Class인 Stock을 정의해보자 ※ private vs public ① private 비공개 멤버, 클래스 내에서만 접근 가능하다 (데이터 은닉) ② public 공개 멤버, 클래스 외부에서도 접근 가능하다 ※ 예시코드 [stock.h] 헤더파일에 Stock 클래스 정의 및 함수의 원형 제공 #ifndef STOCK #define STOCK #include using namesp..

[C++ 기초 문법] 분할 컴파일

분할 컴파일 지금까지는 코드 작성에 자주 활용되는 함수들을 매번 새로 작성했었다. 하지만 자주 활용되는 함수나 구조체들은 다른 저장소에 따로 관리해 놓고 원할 때만 불러와서 사용하면 편할 것이다. 그 개념이 바로 분할 컴파일이다. 분할 컴파일은 기본적으로 하나의 프로그램을 여러 개의 파일로 나누어 작성하는 방식으로, 헤더 파일(header file)을 통해 구현 가능하다. 헤더 파일에는 어떤 것들이 작성되어야 할까? ① 함수의 원형 ② #define, const (기호 상수) 등 ③ Struct (구조체 선언) ④ Class (클래스 선언) ⑤ Template (템플릿 선언) ⑥ inline (인라인 함수) 헤더 파일(.h), 함수(.cpp), 메인코드(.cpp)의 세 파일로 이루어진 코드를 작성해보자 ..