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

Jimeaning·2023년 10월 24일
0

Intel AIoT

목록 보기
7/38

23.10.24 (화) 26일차

함수와 참조, 복사 생성자

값에 의한 호출 Call by Value
데이터버스 사이즈가 64비트라 리턴값은 최대 64비트 전달 가능.
주소에 의한 호출 Call by Reference
그것보다 클 때는 주소를 넘겨줌.

함수의 중복과 static 멤버

함수의 중복 -> 오버로딩
함수의 중복이라는 것은 함수 이름이 같다는 뜻 !

Auto, static, extern
auto : 지역변수를 선언할 때 아무것도 지정하지 않았을 때 기본값으로 지정되는 storage class
static : static 지시자를 사용해서 생성한 지역 변수는 함수를 빠져나가도 값을 유지할 수 있다
extern : extern은 프로그램을 구성하는 파일들이 여러 개일 때 다른 파일에서 정의된 전역 변수나 함수를 접근할 수 있게 참조(reference)를 제공해주는 지시자이다.

프렌드와 연산자 중복

프렌드
프렌드를 쓰는 이유는 친구나 동료처럼 수평적인 관계의 클래스간의 멤버 변수를 공유해야 할 경우 주로 쓰인다. 하지만 캡슐화를 파괴하는 주범이 될 수 있기 때문에 남발하는 것은 별로 좋지 않다.

연산자 중복
연산자 재정의 : 오버라이딩(원래 기능을 바꿔 쓰겠다)

C++ 과제

café_menu 클래스를 이용하여 제품을 나타내고 café 클래스는 그것을 이용해서 제품 데이터를 읽어들이고 출력한 후 주문을 받아 주문 내역을 출력하고, 주문이 끝나면 그날의 매출통계를 출력하는 프로그램을 작성하시오.

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

class Menu {
public:
    string name = "";
    string size = "";
    double price = 0;
    void menu_list();
};

void Menu::menu_list() {
    cout << "\n======== CAFE MENU 리스트 ========" << endl;
    for (int i = 0; i < 12; i++) {
        cout << "[" << i+1 << "]" << this[i].name << " " << this[i].size << " " << this[i].price << endl;
    }
}

int main()
{
    Menu menulist[13] = {
        {"카페_아메리카노", "Short", 3.6}, {"카페_아메리카노", "Tall", 4.1}, {"카페_라떼", "Short", 4.1} , {"카페_라떼", "Tall", 4.6},
    {"카푸치노", "Short", 4.1}, {"카푸치노", "Tall", 4.6}, {"카페모카", "Short", 4.1}, {"카페모카", "Tall", 4.6},
    {"카라멜_마키아또", "Short", 5.1}, {"카라멜_마키아또", "Tall", 5.6}, {"스타벅스_돌체_라떼", "Short", 5.1}, {"스타벅스_돌체_라떼", "Tall", 5.6}
    };

    Menu* menucafe;
    menucafe = menulist;

    string menu_num;

    int total = 0;

    int menu_cnt[13] = {0};

    menucafe->menu_list();
    while (1) {
        cout << ">> ";
        getline(cin, menu_num, '0');
        
        stringstream orgNum(menu_num);

        int m_num;
        int sum = 0;
        int flag = 1;

        vector<int> numVec;

        while (orgNum >> m_num) {
            numVec.push_back(m_num);

            if (m_num < 0 || m_num > 12) {
                cout << m_num << "은 없는 메뉴입니다" << endl;
                flag = 0;
            }
        }
        
        if (flag == 1) {
            if (numVec.size() == 0) {
                cout << "=========== 매출 통계 ===========" << endl;
                for (int i = 0; i < 12; i++) {
                    if (menu_cnt[i] != 0) {
                        cout << menulist[i].name << " " << menulist[i].size << " " << menu_cnt[i] << "개" << endl;
                    }
                }
                cout << "매출액 총계 : " << total << "원";
                return 0;
            }

            cout << "주문한 상품:\n";
            for (int i = 0; i < numVec.size(); i++) {
                numVec[i]--;

                menu_cnt[numVec[i]]++;
                total += menulist[numVec[i]].price * 1000;
                sum += menulist[numVec[i]].price * 1000;

                cout << menulist[numVec[i]].name << " " << menulist[numVec[i]].size << " " << menulist[numVec[i]].price * 1000 << "원" << endl;
            }
            cout << "합계 : " << sum << "원" << endl;
        }
    }
}

실행 결과


갑자기 궁금해졌던 인텔 '엣지'에서 엣지의 의미..
에지 컴퓨팅이란?
에지 컴퓨팅은 데이터를 그 생성 위치와 가까운 곳에서 처리, 분석 및 저장하여 실시간에 가까운 빠른 분석과 응답을 가능하게 하는 것을 말합니다. 이런 엣지 컴퓨팅을 사용하는 이유는 서버의 부하를 줄이거나, 엔드 포인트의 응답 시간을 개선하거나, 대역폭을 절약하기 위한 경우가 많습니다.
첨단 창고 및 재고 관리 솔루션에서 비전 강화 로봇 제조 라인, 첨단 스마트 시티 트래픽 제어 시스템에 이르기까지 수십억 개의 분산 장치가 지원하는 새로운 사용 사례에 대한 요구로 인해 사용하고 있습니다.

또한, 스마트 카메라, 모바일 POS 키오스크, 의료 센서, 산업용 PC와 같은 사물 인터넷(IoT) 장치에서 게이트웨이 및 컴퓨팅 인프라까지 데이터 소스에서 실시간에 가까운 빠른 인사이트를 얻기 위해 에지 장치의 사용이 증가하면서 생성 및 수집되는 데이터의 양이 기하급수적으로 증가하고 있습니다.

profile
I mean

0개의 댓글