반응형

C++ 19

C++11 : 구조체에 대해 알아볼까요? (개념 및 예제)

이번 포스팅에서는 C에서의 구조체를 이해하시고 있다는 가정하에 C++ 구조체에 대해 말씀드리겠습니다. 하지만 처음 보신다 해도 잘 이해하실 수 있을 것입니다. #include using namespace std; #define NAME_LEN 20#define SEX_LEN 10#define JOB_LEN 20#define CHARACTER_LEN 20 struct Chulsoo{ char name[NAME_LEN]; char sex[SEX_LEN]; char job[JOB_LEN]; char character[CHARACTER_LEN]; int age; bool marriageStatus; void introduce() { cout

SW/C++ 2019.01.03

C++11 : 람다 함수에 대해 알아볼까요? (개념 및 예제)

람다 함수는 인라인 함수처럼 복잡한 함수 호출 과정을 생략해서 시간을 절약할 수 있을 뿐만 아니라, 코드의 가독성까지 높여줍니다. 람다 함수는 C++11부터 사용할 수 있으면 고급 함수이므로 처음 배울 때는 어려울 수 있으므로 반복 학습이 필요합니다. 먼저 다음 예제를 살펴보겠습니다. 인라인과 람다 함수를 비교하였습니다. 코드가 다소 난해하다면 넘기고 읽으셔도 됩니다. #include using namespace std; class Chulsoo{public: void eat(int steakWeight); inline void eatInline(int steakWeight) { cout

SW/C++ 2019.01.02

C++11 : 인라인 함수에 대해 알아볼까요? (개념 및 예제)

인라인이라는 단어 그대로의 의미는 줄 안쪽을 의미합니다. 실제 인라인 함수의 의미와도 일맥상통합니다. 일반 함수와 호출 과정부터 비교해보며 예제를 통해 알아보겠습니다. 함수 호출은 보통 메모리상의 점프를 이용하며, 여러 가지 상태 정보 등을 저장하고 복원해야 하므로 내부적으로 복잡한 과정을 거칩니다. 인라인 함수를 사용하면 복잡한 함수 호출 과정을 단순하게 대체할 수 있습니다. 인라인 함의 문법은 다음과 같습니다. 일반 함수와 같은 형태이지만 inline 키워드로 시작하는 점이 다릅니다. inline 반환형 함수명(매개변수 목록); 인라인 함수가 앞에서 배운 일반 함수와 어떻게 다른지 다음 예제를 보면서 비교해보겠습니다. #include using namespace std; class Chulsoo{pu..

SW/C++ 2019.01.01

C++11 : 함수 오버로딩에 대해 알아볼까요? (개념 및 예제)

오버로딩은 사전 상에서는 짐을 많이 싣는다는 의미를 가지고 있습니다. 함수 오버로딩은 과연 무슨뜻일까요? 단어의 의미는 함수를 짐처럼 많이 싣는다고 생각할 수 있습니다. A 함수, B 함수, C 함수가 있다고 가정하겠습니다. 여러 함수를 하나의 장소, 즉 하나의 함수 이름에 쌓는 것을 함수 오버로딩이라고 설명할 수 있습니다. 함수 오버로딩은 객체지향의 특징 중 하나인 다형성이라는 개념과 일맥상통합니다. 함수의 다형성이란 하나의 함수를 다양한 형태로 나타내는 것을 의미합니다. 다양한 함수를 결합하는 방식에 대해 알아보겠습니다. #include using namespace std; class Chulsoo{public: void Eat(void); void Eat(int SteakNum); void Eat(..

SW/C++ 2018.12.31

C++11 : 디폴트 매개변수에 대해 알아볼까요? (Default Argument)

디폴트 매개변수는 말 그대로 기본 매개변수를 의미합니다. 함수를 정의할 때 매개변수를 넣거나 안 넣으면 되지 왜 디폴트 매개변수가 필요할까요? 그러나 실제로 프로그래밍을 하다보면 항상 넣어줘야 하는 값 마저도 귀찮아 지는 날이 옵니다. 프로그래머는 아주 현명하고 게으른 사람들이 만드는 것이라고 교수님의 말씀이 생각납니다. 다음 예제를 살펴보겠습니다. #include using namespace std; class Chulsoo{public: int Eat(int SteakNum);}; int main(void){ Chulsoo chulsoo; chulsoo.Eat(); return 0;} int Chulsoo::Eat(int SteakNum){ cout

SW/C++ 2018.12.30

C++11 : 형변환에 대해 알아볼까요?

배열의 포인터 변환배열을 포인터로 변환해 주소 이동만 가지고 효율적으로 배열의 값들을 읽거나 수정할 수 있습니다. ptr 포인터 변수에 arr배열을 대이배 자동으로 포인터 형으로 변환합니다. 다음으로 배열의 두번째 요소 값을 출력하는데, 포인터 변수 ptr의 주소를 한 칸 옮긴 값과 일치함을 알 수 있습니다. 배열의 원리가 기본적으로 포인터와 같으므로 자동으로 형변환이 되는 것입니다. #include using namespace std; int main(){ int i; int arr[10]; for (i = 0; i

SW/C++ 2018.12.26

C++11 : 포인터에 대해 알아볼까요?

포인터는 참조자와 유사하게 주소로 특정 변수나 객체를 참조할 수 있습니다.포인터변수에는 특정 변수의 주솟값이 저장됩니다.참조자와 다른 점은 가리키는 대상이 없을 수 있고 가리키는 대상을 언제든 변경할 수 있습니다.따라서 초기화할 필요도 없겠죠? 변수명 앞에 *를 선언하면 포인터 변수를 지정할 수 있습니다.정수형 변수 value를 선언하고 100으로 값을 초기화합니다.그 다음 pointerValue를 포인터 변수로 선언해 value 변수의 주소 참조 값을 저장합니다. int value = 100;int* pointerValue = &value; 다음의 예제의 결과를 생각해보세요. 그리고 한번 돌려보시고 메모리 주소를 확인해봅시다.이번 포스팅에서는 간단하게 다루겠습니다.이미 좋은 강좌들이 많으니 참고하여 다..

SW/C++ 2018.12.20

C++11 : 참조자와 한정자에 대해 알아볼까요?

참조자의 이해이번 포스팅에서는 변수의 별칭을 만드는 참조자와 포인터에 대해 알아보겠습니다.어떤 변수를 참조자로 선언하려면 다음처럼 주소 연산자(&)를 변수명 앞에 지정합니다. int peter = 185;int &seoul = peter; 이렇게 선언하면 seoul 변수는 int형으로 선언한 peter를 참조하게 되며 peter 변수의 별칭이 됩니다.참고로 cout을 이용해 변수를 그대로 출력하면 값이 출력되고 주소 연산자(&)를 변수명 앞에 붙여서(&변수명) 출력하면 해당 변수의 메모리 주소가 출력됩니다. #include using namespace std; int main(){ using salary = double; salary peter = 100.12; salary &sangwon = peter..

SW/C++ 2018.12.18

C++11 : 변수와 자료형에 대해 알아볼까요?

변수이름을 지을 때 일반적으로 지켜야 할 사항1. 의미를 파악할 수 있도록 식별할 수 있는 단어로 구성2. 일반적으로 소문자로 구성클래스 이름은 일반적으로 대문자로 시작3. 숫자는 변수 이름의 첫 글자로 사용할 수 없음4. 여러 단어를 조합할 때는 일관성 있는 규칙을 적용할 것5. 예약어는 변수 이름으로 사용할 수 없음 c++ 기본자료형C++11 표준 문서에 정리된 기본 자료형은 아래 표와 같습니다.데이터를 담을 수 있는 최소 크기를 비트 단위로 명시하고 있는데요.실제 크기는 운영체제나 cpu에 따라 달라질 수 있습니다.최대 크기는 달라질 수 있으나 최소 크기는 준수할 수 있도록 컴파일러에게 기준을 제시합니다. 자료형 의미 최소크기 short 짧은 정수 16bit int 정수 16bit long 긴 정수..

SW/C++ 2018.12.18

[ C++ ] namespace에 대해 알아볼까요?

C++ 공부를 하면 namespace라는 문법을 자연스럽게 접합니다.하지만 정확한 의미를 모르고 using namespace std 라고 입력할 뿐입니다.화면에 자열을 출력할 때 필요한 규칙 정도로 생각하고는 합니다. 네임스페이스는 지정한 라이브러리를 사용할 수 있도록 소속을 알리는 역할을 합니다. using namespace std using 키워드로 std 라이브러리에 포함된 내용들을 사용할 것이라고 선언합니다. 따로 소속을 알리지 않아도 사용할 멤버가 std 라이브러리에 포함된 것으로 간주하게 됩니다. 만약 using 키워드로 네임스페이스를 지정하지 않고 cout을 활용한다면 어떻게 될까요?std::cout 처럼 std 라이브러리에 포함된 멤버임을 알려주어야 합니다. 다음은 네임스페이스를 활용한 간..

SW/C++ 2018.12.15

C++와 객체 지향에 대해 알아볼까요?

C++는 고성능의 세련된 문법을 보유하고 있습니다. 또 라이브러리를 제공하는 훌륭한 객체지향 언어입니다. 90년대 초반 부터 마이크로소프트와 인텔 등의 기업들과 gcc를 앞세웠습니다. 그 결과 오픈 소스 진영에서 하드웨어와 운영체제에 최적화된 컴파일러를 앞다투어 지원해왔습니다. 특히 C++11 버전에는 다양한 기능을 추가했습니다. 뿐만 아니라 개발자 편의를 제공하는 스펙들을 포함하였습니다. Boost와 같은 라이브러리를 함께 사용하면 코드를 더욱 명료하게 작성할 수 있습니다. C++ 등장배경과 표준C는 1972년 벨 연구소의 유닉스 운영체제 개발자인 데니스 리치가 고안하였습니다. 운영체제를 개발할 때 하드웨어 제어를 위해 어셈블리어를 사용하였습니다. 유지보수가 어렵고 하드웨어 의존성이 컸습니다. 대안을 ..

SW/C++ 2018.11.19

[ C++ ] tuple 개념 및 예제

tuple 튜플의 뜻을 아시나요? 튜플은 사물의 유한한 순서를 뜻합니다. 튜플은 lisp, python, linda 등의 언어에서 두 개 이상의 순선대로 정렬된 서로 다른 값들의 모임을 정리할 때 이용합니다. 다른 객체 지향 언에서 사용되는 튜플을 C++11에서 채택하여 제공하는 것입니다. std::typle tupleValue(10,x,"string");cs 튜플의 선언 방식은 위와 같습니다. tuple 키워드를 이용하여 꺽쇠 안에 묶기 원하는 데이터 형을 나열합니다. 튜플은 함수에서 반환값이 두 개 이상일 경우에 사용하면 효과적입니다. 두 개 이상의 반환값을 전달하기 위해 포인터나 참조를 이용하거나 구조체를 만들어 전달하는 불편함이 있었습니다. 튜플을 이용한다면 반환값을 몇개이던지 전달할 수 ..

SW/C++ 2018.11.16

[ C++ ] 스마트 포인터 개념 및 예제

스마트포인터 개발자 분들에게 가장 큰 근심은 포인터의 메모리 할당과 해제라고 할 수 있습니다. 아무리 메모리에 신경을 쓴다고 해도 하나라도 놓치게 된다면 메모리 누수가 발생하기 때문입니다. 다른 객체지향 언어인 자바는 다행히도 포인터를 사용하지만 자동으로 해제할 수 있도록 설계가 되어 있습니다. 아무래도 C++보다는 그래서 쉬운 편인 것 같습니다. 따라서 C++에서도 자동으로 메모리를 해제해주도록 하는 기능이 c++11에 추가되었습니다. 스마트 포인터의 이름이 왜 스마트인지 이제 느낌이 오시나요? shared_ptr shared_ptr mySmartPtr (new Type);cs 선언 방식은 위와 같습니다. shared_ptr을 사용하기 위해서는 참조 카운트의 개념을 알아야 합니다. 참조 카운트는 해당 ..

SW/C++ 2018.11.16

[ C++ ] range base for 개념 및 예제

Range base for반복문을 작성하기 위해 배열, vector, map 등 같은 범위가 지정된 변수들을 이용합니다. 배열을 반복하기 위해 보통 for 문을 많이 작성합니다. 만약 배열이 10개라서 10번의 반복문을 작성하였다고 가정하겠습니다. 그런데 배열의 선언 변경되면서 원소의 개수가 변경되면 어떻게 될까요? 원소의 개수가 변경된 만큼 배열의 반복문의 숫자도 모두 변경해야하는 불편함이 있습니다. 컴파일 할때마다 수정해야하고 아주 귀찮은 일입니다. C++11에서는 배열, vector, map 등 범위가 있는 변수들을 하나씩 알아서 방문하는 range base for 문을 사용할 수 있습니다. #include #include using namespace std; int main(){ int numAr..

SW/C++ 2018.11.16

[ c++ ] auto 개념 및 예제

auto변수를 선언하기 위해 변수 이름 앞에 어떤 데이터 형으로 선언할지 변수의 데이터 형을 입력해야 했습니다. 하지만 객체 지향을 이용하는 개발자들은 데이터형을 하나하나 입력하는 것도 귀찮은게 사실입니다. 결국 개발자들은 컴파일러가 데이터에 따라 알아서 데이터 형을 정해주기를 바랍니다. 최근 이슈가 되고 있는 파이썬에는 어떠한 변수에도 데이터형을 입력하지 않습니다. 프로그램을 실행하면 자동으로 데이터 형을 정하는 것입니다. C++11에서는 auto라는 기능이 추가되었습니다. auto를 활용하면 데이터 형을 컴파일러가 알아서 지정합니다. 대신 auto로 선언되는 변수는 선언과 동시에 초기화되어야하는 것이 조건입니다. 컴파일러가 초기화되는 시점에 데이터형을 결정합니다. 따라서 어떤 데이터형으로 선언할지 알..

SW/C++ 2018.11.15

C++11은 무엇일까요?

객체 지향 언에는 많은 언어가 있습니다. C++ 뿐만 아니라 스몰토크, Ada, 파이썬, 루비까지 다양한 언어가 있습니다. 이러한 다양한 언어가 존재하는 이유는 시대가 흐르면서 컴퓨터의 성능이 발전하고 고성능 장치가 생겨나면서 다양한 요구가 생기기 때문입니다. 그러므로 객체지향에서 원하는 요구사항이 변경되면서 C++도 다양한 요구 사항을 받아들이고 있습니다. 새로운 기능들을 추가하기 위해 지속적으로 발전하는 것입니다. 앞으로 알아두면 좋은 C++ 기능을 포스팅하겠습니다. 객체지향의 요구사항이 변경되고 새롭게 추가되면서 C++도 새로운 좋은 기능들이 채택되었습니다. 혹시 C++0x라고 들어보셨나요? C++ 기능들이 추가되어가면서 2000년대의 한 시점에 표준이 공개될 것이라고 예상해 C++0x라 칭하였습니..

SW/C++ 2018.11.15

Adaptive Autosar 특징

지능형 ECU와 기술 드라이버의 환경은 많은 컴퓨티 성능을 필요로 합니다. 그리고 이러한 기술 동향은 이 필요에 맞는 기준을 제공합니다. 전력 및 비용 효율성은 중요한 부분이지만 안전 영역의 HPC는 다양한 난제에 부딪힙니다. 이것을 해결하기 위해서는 ECU가 활용하지 못하는 기술을 채택해야합니다. 또 혁신적인 기술을 최대한 활용할 수 있어야 합니다. C ++ 객체 언어를 활용하여 프로그래밍을 할 수 있습니다. 성능이 중요한 복잡한 응용 프로그램에도 새로운 응용 소프트웨어를 개발하고 알고리즘을 개발하기 위해서 C++이 채택되었습니다. 새로운 알고리즘의 신속한 적용과 응용 프로그램의 생산성 향상에 큰 도움이 될 것입니다. SOA 애플리케이션을 지원하기 위해서는 배포 및 자원 할당에서 유연성과 확장성을 허용..

SW/Autosar 2018.11.13
반응형