[Intel AI SW 아카데미] C++ 개요

Jimeaning·2023년 10월 20일

Intel AIoT

목록 보기
5/38

23.10.20 (금) 24일차

오늘부터 객체지향프로그래밍(C++) 시작
C++ 3일, MFC 3일, 프로젝트(MFC로 RFID 만드는 시스템) 2일 예정

C++

C++도 AI 개발이 가능. 하지만 에러 잡기가 파이썬보다 훨씬 까다로움..
C++에서는 numpy 행렬이 어려움. (numpy: 데이터를 선가공하는 것)

여러 개의 모듈이 섞여 있어 소켓을 거쳐 stream에 전달해줘야 하기 때문에 cin, cout을 사용하는 것.
하지만 printf를 쓸 수는 있음.

알아야 하는 것

  1. 오버로딩
  2. 오버라이딩
  3. 상속
  4. class - 캡슐화
    cf) 구조체 (변수, 상수, 문자열..)
    구조체의 단점: 똑같은 걸 찍기 때문에 빈 공간이 늘어남.

오버로딩과 오버라이딩의 차이
오버로딩 (Overloading) (함수 중복)
C언어에서 하나의 함수는 하나의 기능만을 구현해야 한다. 한편 자바에서는 하나의 메소드 이름으로 여러 기능을 구현할 수 있다.
오버로딩은 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메소드를 정의할 수 있다.

  • 반환 타입 관계 없음
  • 메소드명 같음
  • 매개변수 다름 (자료형 or 순서)

오버라이딩 (Overriding)
오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것이다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야 하는 경우 오버라이딩을 할 필요가 생긴다.

  • 반환타입, 메소드명, 매개변수 모두 같음
  • 부모 클래스로부터 상속받은 메소드를 재정의하는 것

등호(=)의 의미
한 번에 데이터버스에 담아서 보낼 수 있는 양. C언어는 반드시 왼쪽 오른쪽의 형이 동일해야 함.

C++의 확장자

sln -> vcxproj ->cpp


C언어 퀴즈

  • 전달인자를 받아 반환인자로 리턴하는 함수를 활용할 것
  • for, if, while문 드을 반드시 사용할 것 (단순 printf 금지)
  • 주어진 조건을 모두 만족해야 함.

바퀴가 달린 이동 로봇이 위의 그림과 같이 회전할 경우, 좌/우 바퀴의 회전 수에 차이가 발생한다. 조건이 다음과 같이 주어졌을 때, 두 바퀴 각각의 회전 각도를 계산하시오.

[조건]
도로의 폭 : 1m
두 바퀴 사이의 거리 : 0.7m
회전 각도 : 90도

출력 예제

소스 코드

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <math.h>

#define PI 3.14
#define ROAD 1
#define DIFFWHEEL 0.7
#define ANGLE 0.25

double spin(int rad, int dir)
{
    float l_rad;
    float r_rad;

    static int flag = 0;

    l_rad = (ROAD - DIFFWHEEL) / 2;
    r_rad = l_rad + DIFFWHEEL;

    if (flag == 1)
    {
        if (dir == 1)
        {
            return 2 * l_rad * ANGLE;
        }
        else if (dir == 2)
            return 2 * r_rad * ANGLE;
    }

    flag++;
    flag %= 2;

    if (dir == 1)
    {
        return 2 * r_rad * ANGLE;
    }
    else if (dir == 2)
        return 2 * l_rad * ANGLE;

    printf("after flag: %d, %.2f %.2f\n", flag, l_rad, r_rad);
}

int main()
{
    int rad;    // 바퀴의 지름
    int d;      // 회전 방향
    int sec;    // 회전 시간

    float l_spin_cnt;
    float r_spin_cnt;

    float right = 0;
    float left = 0;
    float time = 0;


    printf("바퀴의 지름을 입력하세요(0.1m): ");
    scanf("%d", &rad);
    printf("회전 방향을 입력하세요(1: 좌 2: 우): ");
    scanf("%d", &d);
    printf("회전 시간을 입력하세요(s): ");
    scanf("%d", &sec);

    r_spin_cnt = spin(rad, d);
    l_spin_cnt = spin(rad, d);

    printf("1. 우측 바퀴 회전수 : %.2f바퀴, 회전량 : %.2f도\n", r_spin_cnt, r_spin_cnt * 360);
    printf("2. 좌측 바퀴 회전수 : %.2f바퀴, 회전량 : %.2f도\n", l_spin_cnt, l_spin_cnt * 360);
    printf("3. 0.1초당 회전 각도 출력 : \n");
    printf("time : right - left\n");
    
    for (int i = 0; i <= 10 * sec; i++)
    {
        printf("%.2f : %.2f - %.2f\n", time, right, left);
        time += 0.1;
        right += r_spin_cnt * 360 / (10 * sec);
        left += l_spin_cnt * 360 / (10 * sec);
    }
}
profile
I mean

0개의 댓글