devdw
bloom_
devdw
전체 방문자
오늘
어제
  • 분류 전체보기 (20)
    • develop (15)
      • 개발기록 (0)
      • Java (5)
      • C++ (4)
      • Spring (0)
      • Database (3)
      • Algorithm (1)
      • etc (2)
    • diary (3)
      • 일기 (0)
      • 🍕🍔🍟 (1)
      • Review (2)
    • works (1)
      • reviews (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • PYTHON
  • 코딩테스트
  • 스테들러
  • 신경망 교과서
  • database
  • java
  • STAEDTLER NORIS DIGITAL S PAN
  • float
  • Share
  • xor
  • GIST
  • 변수
  • AI
  • 순간접착제
  • 난수생성
  • iteration
  • array
  • class
  • lesson1
  • 다이소
  • 스테들러노리스디지털펜
  • 신경망
  • SourceCode
  • github
  • 펜그립
  • 알고리즘
  • Codility
  • 조심또조심
  • 길벗
  • 머신러닝

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
devdw
develop/C++

[씹어먹는 C++ - 4-1, 2] 객체지향 프로그래밍, 함수 오버로딩, 생성자

develop/C++

[씹어먹는 C++ - 4-1, 2] 객체지향 프로그래밍, 함수 오버로딩, 생성자

2021. 9. 1. 16:07

4-1

객체

변수들과 참고 자료들로 이루어진 소프트웨어 덩어리

추상화

객체가 현실 세계에 존재하는 것들을 나타나기 위해 필요한 과정

캡슐화

인스턴스 메소드를 통해 인스턴스 변수들을 간접적으로 조절하는 것

예시

class Animal {
    private: // 외부에서 접근 불가능한 것들 (생략 가능)
    int food;
    int weight;

    public: // 외부에서 사용가능한 것들
    void set_animal(int _food, int _weight){
        food = _food;
        weight = _weight;
    }
    void increase_food(int inc){
        food += inc;
        weight += (inc / 3);
    }
    void view_stat(){
        std::cout << "이 동물의 food : " << food << std::endl;
        std::cout << "이 동물의 weight : " << weight << std::endl;
    }
}; // 세미콜론!

4-1문제 풀이

#include <iostream>
class Date{
int year_;
int month_; // 1부터 12까지
int day_; // 1부터 31까지
public:
void SetDate(int year, int month, int day);
void AddDay(int inc);
void AddMonth(int inc);
void AddYear(int inc);
void ShowDate();
int GetCurrentMonthTotalDays(int year, int month);
Date(){
year_ = 2020;
month_ = 1;
day_ = 1;
}
Date(int year, int month, int day){
year_ = year;
month_ = month;
day_ = day;
}
};
int Date::GetCurrentMonthTotalDays(int year, int month){
static int month_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(month != 2) return month_day[month-1];
else if(year % 4 == 0 && year % 100 != 0) return 29;
else return 28;
}
void Date::SetDate(int year, int month, int day){
this->year_ = year;
this->month_ = month;
this->day_ =day;
}
void Date::AddDay(int inc){
while(true){
int total_days = GetCurrentMonthTotalDays(year_, month_);
if(day_ + inc <= total_days){
day_ += inc;
return;
}else{
// 다음달로 넘어감
inc -= (total_days - day_ + 1);
day_ =1;
AddMonth(1);
}
}
}
void Date::AddMonth(int inc){
AddYear((inc + month_ -1) / 12);
month_ += inc % 12;
month_ = (month_ == 12) ? 12 : month_ % 12;
}
void Date::AddYear(int inc){
year_ += inc;
}
void Date::ShowDate(){
std::cout << "오늘은 "<<year_<<"년 "<<month_<<"월 "<<day_ <<"일 입니다. "<<std::endl;
}
int main(){
// default constructor
Date day;
day.SetDate(2011,3,1);
day.ShowDate();
day.AddDay(30);
day.ShowDate();
day.AddDay(2000);
day.ShowDate();
day.SetDate(2012,1,31);
day.AddDay(29);
day.ShowDate();
day.SetDate(2012, 8, 4);
day.AddDay(2500);
day.ShowDate();
//constructor
Date day2(2021, 3, 1); // 암시적 방법
Date day3 = Date(2021, 4, 1); // 명시적 방법
day2.ShowDate();
day2.AddYear(10);
day2.ShowDate();
return 0;
}
view raw oop.cpp hosted with ❤ by GitHub

4-2

함수 오버로딩

함수의 이름이 같더라도 인자가 다르면 다른 함수라고 판단

생성자

  • 객체 생성 시 자동으로 호출되는 함수
  • 객체 안 변수들을 초기화시켜줌
  • 객체 초기화 역할이기 때문에 반환 값이 없음

디폴트 생성자

클래스 내에 개발자가 어떠한 생성자도 명시적으로 정의하지 않았을 경우 컴파일러가 자동으로 추가해주는 생성자

class Test {
    int a;
    public:
    Test(){ // 디폴트 생성자
        a = 1;
    }
    Test(int a_){
        a = a_;
    }
}

int main()
{
    Test t1();
    Test t2 = Test();
    Test t3(3); // 암시적 방법 (implicit)
    Test t4 = Test(4); // 명시적 방법 (explicit)
}
C++ 11부터 명시적으로 디폴트 생성자를 사용하도록 명시할 수 있음
class Test1 {
    public:
    Test1() = default; // 디폴트 생성자 정의해라
}

4-2 문제 풀이

TODO 해보기

#include <iostream>
class Point{
int x, y;
public:
Point(int pos_x, int pos_y){
x = pos_x;
y = pos_y;
}
int GetX() const {return x;}
int GetY() const {return y;}
};
class Geometry{
Point* point_array[100]; //점 100개 보관하는 배열
int num_points;
public:
Geometry(){
num_points = 0;
}
void AddPoint(const Point &point){
point_array[num_points++] = new Point(point.GetX(), point.GetY());
}
void PrintDistance(); //모든 점들 간의 거리 출력
void PrintNumMeets(); //모든 점들을 잇는 직선들 간 교점의 수 출력
};
view raw oop2.cpp hosted with ❤ by GitHub

'develop > C++' 카테고리의 다른 글

[씹어먹는 C++ - 4-3, 4] 복사 생성자, 소멸자, const, static  (0) 2021.09.14
[씹어먹는 C++ - 3] 메모리 할당/해제  (0) 2021.09.01
[씹어먹는 C++ - 2] 참조자  (0) 2021.09.01
  • 4-1
  • 객체
  • 추상화
  • 캡슐화
  • 예시
  • 4-1문제 풀이
  • 4-2
  • 함수 오버로딩
  • 생성자
  • 4-2 문제 풀이
'develop/C++' 카테고리의 다른 글
  • [씹어먹는 C++ - 4-3, 4] 복사 생성자, 소멸자, const, static
  • [씹어먹는 C++ - 3] 메모리 할당/해제
  • [씹어먹는 C++ - 2] 참조자
devdw
devdw
끄적끄적

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.