본문 바로가기

IT124

CPP 초급 강좌 18. C++ if init, if constexpr, rang for CPP 초급 강좌 18. C++ if init, if constexpr, rang for if init C++17 부터 추가된 기능으로 조건문을 만들 때, 초기화 구문을 추가할 수 있게 되었다. 아래 코드를 보자. int f1() {return 0;} int main() { int n = f1(); if (n == 0) { //작업 } } 위 코드를 if init 적용을 해보자. int f1() {return 0;} int main() { if (int n = f1() ; n == 0) { //작업 } } 이와 같은 표현이 가능하다. 이런 표현이 어떤 이점이 있을까? int n = f1(); if 문 외부에 있다면, main 전역에서 변수가 생명력을 가지지만 if init을 통해 성성된 변수는 if문 안.. 2020. 10. 28.
CPP 초급 강좌 17. C++ 람다표현식 lambda expression CPP 초급 강좌 17. C++ 람다표현식 lambda expression 람다 표현식 lambda expression 을 봅시다. 아래 예제를 봅시다. int f1(int a) {return a + a;} int main() { [](int a) { return a + a; }; //a. [](int a) { return a + a; }(1); //b. } int f1(int a) {return a + a;} 함수를 람다를 통해 표현한다고 합시다. 반환형과 이름 int f1 -> [] 교체합니다. 그럼 a의 형태가 되는데 함수표현은 이것이 끝입니다. 호출하고 싶으면 뒤(인자)로 호출하시면 됩니다. b와 같은 형태로 적어주시면 해당 람다함수가 호출까지 됩니다. 일반적인 함수는 글로벌 스페이스에 만들고 함.. 2020. 10. 27.
CPP 초급 강좌 16. C++ constexpr function CPP 초급 강좌 16. C++ constexpr function c++11부터 사용 가능한 constexpr function을 보자. 이전에 constexpr에 대하여 공부했었다. 기억이 안나는 분들을 위해 아래 링크를 남겨두겠다. 컴파일 시간에 사용하는 상수라는 계념이었다. constexpr 무었? CPP 초급 강좌 9. C++ constexpr, const CPP 초급 강좌 9. C++ constexpr, const constexpr 에 대해 적어보겠습니다. constexpr c++11 부터 도입된 문법으로 컴파일 시간 상수를 만드는 새로운 키워드입니다. 해당 문법이 무었인지 왜 도입되었는지를 � sillim83.tistory.com constexpr function? 함수의 인자를 컴파일 시간에 .. 2020. 10. 26.
CPP 초급 강좌 15. C++ 후위 반환 타입 trailing return type CPP 초급 강좌 15. C++ 후위 반환 타입 trailing return type c++11 부터 후위반환 타입 이라는 표현법이 생겼습니다. // int f1(int a) // auto f1(int a) -> int auto f1(int a) -> int { return a + a; } int main() { f1(0); } 맨 위의 주석 두 줄은 완전 같은 형식의 표현입니다. 우리에게 익숙한 방식은 아무래도 int f1(int a) 형식이겠죠. 이것을 다음과 같이 auto f1(int a) -> int라고도 표현할 수 있습니다. 함수 앞에 리턴타입을 지우고, auto를 쓰시고, 뒤에 -> 반환 타입을 표기하는 것입니다. 이러한 표현방식을 후위 반환 타입 표현 방식이라 하고, trailing retu.. 2020. 10. 25.
CPP 초급 강좌 14. C++ 함수삭제, delete function 사용이유? CPP 초급 강좌 14. C++ 함수삭제, delete function 사용 이유? 함수를 명시적으로 삭제하는 기능인 함수삭제 delete function에 대해 보겠습니다. c++11 부터 지원하는 기능입니다. 함수삭제 function delete 예제부터 void f1(int) = delete; //a int main() { f1(0); //b } 사용방법은 크게 별 다른 것이 없습니다. a와 같이 삭제하려는 함수 뒤에 = delete; 라 표시해주시면 됩니다. 컴파일 시 에러를 호출합니다. 이걸 보고 이런 걸 왜 사용하는 거지 라고 생각하실 수 있는데, 필요성이 있습니다. 함수 인자의 암시적 형 변환을 통한 호출 방지 다음 예제를 보겠습니다. int f1(int a, int b) { return a.. 2020. 10. 24.
CPP 초급 강좌 13. C++ 템플릿 기초, template CPP 초급 강좌 13. C++ 템플릿 기초, template 이번에는 템플릿 이전의 함수 오버로딩 function overloading 에서 함수 이름이 같아도 파라매타 등이 차이점이 있으면 작성이 가능함을 배웠었다. 먼저 함수 템플릿(function template) 다음과 같은 코드를 보자. int f1(int a) //a { return a; } float f1(float a) //b { return a; } int main() { f1(0); f1(0.0f); } 함수 오버로딩 기능을 사용해 두 함수를 작성했다. a, b를 비교해 보면 각 함수는 반환타입과 파라매타의 형태가 같고, a, b는 그 둘만 서로 다르고 본문 내용도 똑같다. 이럴 경우에 템플릿을 사용하면 좋다. 템플릿이란? 타입만 다르.. 2020. 10. 23.
CPP 초급 강좌 12. C++ 함수 오버로딩 function overloading 사용법, 주의사항 CPP 초급 강좌 12. C++ 함수 오버로딩 function overloading 사용법, 주의사항 함수 오버로딩(function overloading) 동일한 이름을 함수를 여러개 만들 수 있는 기능 단, 인자의 개수, 인자의 타입이 달라야 한다. 사용자 입장에서는 동일 함수처럼 사용할수 있어 좋다. 이게 당연한 거지라고 생각하실지도 모르겠지만, C언어는 안 되는 기능이다. 예제 코드 void f1(int p1) {}; void f1(int p1, int p2) {}; void f1(int p1, int p2, int p3) {}; void f1(float p1) {}; int main() { f1(0); f1(0,0); f1(0,0,0); f1(0.0f); } 주의사항 디폴트 파라미터와 같이 사용할.. 2020. 10. 22.
CPP 초급 강좌 11. C++ default parameter 사용과 주의사항 CPP 초급 강좌 11. C++ default parameter 사용과 주의사항 default parameter 디폴트 파라매타라고 부른다. 함수 호출 시 인자를 전달하지 않으면 미리 지정된 인자 값을 사용하도록 하는 문법 학원에서 학생 등록을 한다고 하자. 이름과 전화번호를 등록하길 원하는데, 등록하지 않길 원하는 학생은 등록을 하지 않아도 된다고 가정하다. #include #include using namespace std; void add(string name, string number) { //~~ 구현 구현 } int main() { add("개똥이", "123123"); add("말똥이", "123123"); add("소똥이", "123123"); } add란 함수에 인자로 이름과 전번을 넣게.. 2020. 10. 21.
CS 기초강좌 5. C# System.Object에 대하여 CS 기초강좌 5. C# System.Object에 대하여 아래 코드부터 볼까요? class Point { public int x = 0; public int y = 0; } class Program { static void Main(string[] args) { Point p = new Point(); } } 간단하게 Point 라는 x,y 정보를 가지는 클래스를 만들어 보았습니다. 이 클래스를 생성시키고 x, y에 접근하려 했을 때, 아래와 같이 표시되는데요. Point p = new Point(); p.ToString(); //?? 분명히 새로 만든 클래스인데 내가 생성한 적 없는 메서드가 보입니다. 사용 또 한 되고요. system.Object 이전 5강에서 c#은 모두 객체이라고 말한 적이 있습.. 2020. 10. 19.
CS 기초강좌 4. C# 타입, 변수의 특징 CS 기초강좌 4. C# 타입, 변수의 특징 c#에서 타입과 변수의 특징을 알아보자. 다음 코드를 보자. int n = 0; Console.Write(n); 정상 독작을 하는 코드이다. 만약 n을 초기화하지 않는다면? C++ 등 여러 언어에서 값을 초기화 하지 않을 경우 쓰레기 값, 알기 힘든 값이 표기되는 경우가 많은데, C#의 경우는 명시적으로 오류를 출력한다. var? 라인의 우변의 보고 좌변을 형식을 추론하여 사용한다. 다음 코드를 보자. int n = 0; int n1 = n; n을 float형으로 바꾼다고 가능하면, float n = 0; var n1 = n; c#은 모든 것이 객체이다. 당신이 명시적으로 선언한 값들만이 객체가 아니다. float n = 0; //변수 var n1 = n; /.. 2020. 10. 18.
CS 기초강좌 3. C# interface 인터페이스 CS 기초강좌 3. C# interface 인터페이스 c#에는 인터페이스라는 계념이 있습니다. 일관된 형태의 라이브러리를 만들려고 할 때 관계성이 있는 클래스들이 사용하는 메서드의 이름을 약속하는 문법이다. 클래스는 만드는 사람과, 사용하는 사람이 인터페이스를 알고 있으면 메소드 들의 규칙성이 있음을 미리 알 수 있다. 다음 예를 보자. 자료구조를 구현할 때 using System; class Vector { public void Clear() { } public void Add() { } public void Remove() { } } class Queue { //여기에도? } class Program { static void Main(string[] args) { } } 위와 같이, 자료구조 클래스를.. 2020. 10. 17.
CS 기초강좌 2. C# 클래스 기초 CS 기초강좌 2. C# 클래스 기초 간단한게 상속 구조의 클래스를 만들어 보았습니다. 아래 코드 using System; class Parent { public int data = 0; } class Child : Parent { } class Program { static void Main(string[] args) { Child c = new Child(); } } class Parent는 부모 클래스이고 class Child : Parent 에 부모를 상속시킨 구조입니다. 그리고 Child c = new Child(); 코드로 자식을 생성시켜보았습니다. 필드의 재정의 using System; class Parent { public int data = 0; } class Child : Parent .. 2020. 10. 16.