[Intel AI SW 아카데미] C++ 이론 (1)

Jimeaning·2023년 10월 24일
0

Intel AIoT

목록 보기
6/38

23.10.23 (월) 25일차

임베디드의 입출력 장치는 시리얼 포트이다. (모니터가 없기 때문)
-> 입력은 시리얼 포트로 읽고, 출력은 시리얼 포트로 내보낸다

<Enter>를 쳐야 실행되는 함수
버퍼형 함수: 엔터 키가 입력될 때까지 입력된 키를 입력 버퍼에 저장하는 것
getch(): 눌렀을 때 바로 반응하는 것

데이터 개수를 알려줘야 하는 것
cgets, gets : c언어에서 문자를 입력받는 함수
cgets : 몇 개의 데이터를 보낼지 미리 알려줌 (c 붙은게 거의 다 그럼)
gets : 몇 개를 줄 지 모름. 공백을 포함해 입력받음. 다 보냈을 때 NULL문자(\n)를 보내줌.
TCP통신도 미리 알려주고 보내줌
- 나 600메가 보내도 되니 ? 거절 (not ACK). 승인 (ACK)
쪼개진 데이터를 다시 원상태로 붙여주는 것이 게이트웨이 !
버퍼 오버플로우 공격: 게이트웨이를 공격해 인터넷을 다운시키는 것. 버퍼가 비어 있어야 다른 데이터가 들어오는데 계속 꽉 차게 보내서 공격하는 것.
=> 요즘에는 이를 막기 위해 특정 시간이 지나면 다 비우도록 함

c++에서 공백을 포함한 문자를 입력받을 때
세 번째 인자인 delim은 별도로 지정해주지 않으면 엔터(‘\n’)로 인식

cin.getline(변수 주소, 최대 입력 가능 문자수, 종결 문자);
cin.getline(char* str, streamsize n, char dlim);

객체(Object)
독립적으로 존재하는 모든 것

클래스
c와 달리 c++에서는 구조체에 함수를 넣을 수 있음

소멸자
객체가 소멸되는 시점에서 자동으로 호출되는 함수
생성된 역순으로 소멸됨.

클래스와 구조체의 차이
구조체의 디폴트 접근 지정 : public
클래스의 디폴트 접근 지정 : private


동적 메모리 할당 및 반환

  • C언어의 동적 메모리 할당 : malloc(), free()
    메모리 여러 번 할당하고 풀 때는 free 한 번만
  • C++의 동적 메모리 할당 : new, delete
    new로 할당한 만큼 delete로 풀어줘야 함

C++ 과제

문제
주차관리 시스템을 만든다고 가정했을 때 차에 대한 클래스를 만들어 구현하고 주차등록과 주차요금을 계산하는 함수를 c++ / 파이썬 중 하나로 작성하시오.

  • Car Class는 차량번호, 배차시간, 출차시간, 배차 위치, 장애인차량 유무의 속성을 가지고 있습니다.
  • 주차 요금은 1시간당 2000원 30분에 1000원이며 10분 단위 계산 시 400원입니다. (10분미만 또한 400원)
#include <iostream>
using namespace std;

class Car {
public:
    int num;
    int disorder;

    double t_dispatch;
    double t_left;

    string pos_start;
};

int main()
{
    Car c;

    int total = 0;
    double time;

    cout << "차량번호 : ";
    cin >> c.num;

    cout << "배차 시간 : ";
    cin >> c.t_dispatch;

    cout << "출차 시간 : ";
    cin >> c.t_left;

    cout << "배차 위치 : ";
    cin >> c.pos_start;

    cout << "장애인 차량 유무 (유 1, 무 0) : ";
    cin >> c.disorder;

    time = c.t_left - c.t_dispatch;
    total += int(time) * 2000;
    time -= int(time);

    if (time >= 0.3) {
        total += 1000;
        time -= 0.3;
    }
    if (time > 0) {
        if (int(time * 10) > 0) {
            total += int(time * 10) * 400;
        }
        else {
            total += 400;
        }
    }

    if (c.disorder == 1) {
        total *= 0.5;
    }

    cout << "차량 번호 " << c.num << " 주차비 : " << total;
}
profile
I mean

0개의 댓글