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++ / 파이썬 중 하나로 작성하시오.
#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;
}