본문 바로가기

PL

(103)
[C++] 생성자 개괄- explicit, delete, default, override 생성자 3가지 타입 - 기본 생성자 - 디폴트 생성자 - 복사 생성자 c++11에서 추가된 explicit, delete, default, override 에 대해 작성합니다. explicit 는 암시적인 형변환을 막아주는 키워드 입니다. delete는 특정한 함수에 대해 정의를 금지하는 키워드 입니다. default는 사용자 정의 타입이 기본적으로 만들어주는 생성자 함수를 명시적으로 만들것을 요구하는 키워드 입니다. override는 사용자 정의 타입의 자식 클래스에게 함수를 오버라이딩 하라고 요구하는 키워드 입니다. 1. 기본 생성자 explicit는 암시적인 형변환을 막아주는 키워드 입니다. 예를 들어 Widget 이라는 사용자 정의 타입을 만들고 정수를 하나 받아 생성하게 만들었습니다. 그리고 p..
[C++] 상속 예제 코드가 예상보다 길죠? 한번 차례차례 살펴보도록 합시다. 코드를 우선 보시면, 5~38행에서 Human란 클래스가 정의되었습니다. 유심히 보셔야 할 부분은 11행입니다. Human 생성자 정의에서, ": age(_age)"란 코드가 보이시나요? Human 생성자로 _age 인자가 넘어오면, Human 클래스 내의 멤버 변수 age의 값을 _age로 초기화 시켜주는 역할을 합니다. 이것이 우리가 조금 있다가 배우게 될 "멤버 이니셜라이저(Member Initializer)"를 이용한 초기화 방법입니다.
[C++] 소멸자(destructor) C++에서 생성자는 객체 멤버의 초기화뿐만 아니라, 객체를 사용하기 위한 외부 환경까지도 초기화하는 역할을 합니다. 따라서 객체의 수명이 끝나면 생성자의 반대 역할을 수행할 멤버 함수도 필요해집니다. 이러한 역할을 하는 멤버 함수를 소멸자(destructor)라고 합니다. 소멸자는 객체의 수명이 끝나면 컴파일러에 의해 자동으로 호출되며, 사용이 끝난 객체를 정리해 줍니다. C++에서 클래스 소멸자의 이름은 해당 클래스의 이름과 같으며, 이름 앞에 물결 표시(tilde, ~)를 붙여 생성자와 구분합니다. 즉, Book 클래스의 소멸자는 ~Book()이라는 이름을 가지게 됩니다. 이러한 소멸자는 다음과 같은 특징을 가집니다. 1. 소멸자는 인수를 가지지 않습니다. 2. 소멸자는 반환값이 없지만 void형으로..
[C++] 생성자 콜론(:) Foo(int num): bar(num) 은 초기화 리스트라고 하고, 멤버 변수 bar를 num으로 초기화하는 역할을 합니다. 그냥 생성자 함수{} 내에서 초기화하는 것과, 이렇게 초기화 리스트를 쓰 는것의 차이는 초기화 리스트에서 초기화를 하는 경우, 생성자가 호출될 때 객체의 생성과 초기화가 한 번에 이루어집니다. 생성자 함수 내{}에서 초기화를 하는 경우, 객체가 생성되어, default생성자로 초기화된 상태에서 다시 한 번 할당받게 하게 됩니다. 이 경우엔 default할당-유저할당의 2단계를 거치게 돼서 오버헤드가 생깁니다. 초기화 리스트를 써야만 하는 상황은 크게 다음과 같습니다 클래스가 레퍼런스를 멤버로 가질 때 non static const멤버가 있을 때 default 생성자가 없을 때 b..
[C++] 함수 객체 위 예제에서 주목하셔야 할 부분은 함수 호출 연산자가 오버로딩 되었다는것도 있지만, 메인 함수 내에 Equal 객체로 어떻게 함수가 호출되고 있는지에 대해 보셔야 합니다. 첫번째 호출인 'cmp(5, 5)'는 우리가 첫 예제에서 보아왔던 코드로, 암묵적 호출이라고 합니다. 여기서 암묵적 호출은 밖으로 드러내지 않는 호출이라고 할 수 있으며, 그 아래에 있는 두번째 호출 'cmp.operator()(10, 20)'은 명시적 호출이라고 할 수 있습니다. 분명하게 드러내는 호출이라고 할 수 있는거죠. 그리고 세번째 호출인 'Equal()(10, 20)'은 임시 객체를 통한 암묵적 호출이라고 할 수 있습니다. 여기서 드는 의문점은, 왜 굳이 함수 호출 연산자를 오버로딩하여 객체를 가지고 함수처럼 사용할까요? 우..
[C++] 참조 사이트 'C++ 이야기' 카테고리의 글 목록 소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기 boycoding.tistory.com
[C & C++] macro function, inline function 일반 함수 작동 방식 그런데 여기서 함수포인터를 통하여 함수 내용으로 이동하는데 시간이 소요되게된다. 뭐 엄청나게 큰 타임은 아닐지라도 함수내용이 getter setter와 같이 별볼일 없거나 그러면 왔다 갔다 하는 시간이 더 걸리지도 모른다. 그래서 그러한 함수들은 그냥 포인터로 접근하지말고 사용하는 위치에다가 때려박고싶다. 인라인 함수를 쓰면 컴파일 시간이 길어지고 프로그램 크기가 커진다 그러나 런타임 속도가 빠르다(함수로 넘어가는 시간을 절약) [C++ 때려잡기] C++ 심화강의 7 inline 함수 2018/08/27 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 1 객체 지향 프로그래밍과 클래스 2018/08/27 - [교육 노트/C++ 심화강의] - [C++ 때려잡기..
[C] 연결 리스트 구조체 만들고 사용하기 NODE 구조체에서 가장 중요한 부분은 struct NODE *next;입니다. 얼핏 보면 구조체 자기 자신의 포인터를 멤버로 가지고 있는데 전혀 어렵지 않습니다. next에는 NODE 구조체로 만든 다른 노드의 메모리 주소를 저장합니다. 즉, 자기 자신이 아닌 다른 노드의 메모리 주소를 저장한다는 점을 기억하세요. NODE 구조체에서 데이터는 int형 하나만 저장했습니다. 실제로 사용할 때는 용도에 따라서 다양한 자료형으로 된 멤버 여러 개를 넣으면 됩니다. 이제 단일 연결 리스트에서 노드의 종류를 알아보겠습니다. 노드는 역할에 따라서 두 가지로 나뉩니다. 머리 노드(head node): 단일 연결 리스트의 기준점이며 헤드(head)라고도 부릅니다. 머리 노드는 첫 번째 노드를 가리키는 용도이므로 데이..
[C++] class와 struct의 차이 C++ CLASS(클래스) 정의와 struct(구조체)와 차이 안녕하세요! 공대남입니다. C언어부터 공부하시고 C++를 하시는 분들은 클래스를 처음 접하실 것 입니다. (객체지향언어를 처음 하신다면) 객체지향언어에서는 클래스와 객체가 중요한 개념입니 k96-ozon.tistory.com
[C++] -> 와 . 의 차이
[C&C++] #include 기본 포함 경로, ""와 <> 차이 #include 전처리기에서 의 기준 위치는? : C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 1. C 프로젝트에서 include 기준... blog.naver.com
[C++] enum class 어떻게 보면 enum값이 암시적 형변환이 되어서 int 와 비교가 가능하다는 것은 이점으로 보일 수 있지만, 프로그래머가 예상하지 못한 휴먼 에러를 발생할 수 있습니다. enum class를 도입함으로써 더이상 int 로 암시적 형변환이 되는게 불가능해졌습니다. 이는 기존의 enum 암시적 형변환을 유용하게 사용하셨던 분들께는 안좋은 소식일 수 있지만. 이렇게 까다롭게 열거자들의 형식이 강력하게 제한된다는 점이 우리 개발자들이 만들 수 있는 휴먼에러의 위험성을 줄일 수 있다는 이점이 존재합니다. 이제 명확하게 명시적 형변환을 통해서 열거자를 비교해야 합니다. [C++] enum class (scoped enum) 에 대해서 안녕하세요. BlockDMask 입니다. 오늘은 C++11에서 추가된 enum c..
[C++] 네임스페이스(namespace) 란? 네임스페이스가 뭔지 알기 전에 아주 간단한 Hello World 예제를 살펴봅시다. C++에서 Hello World 를 찍어내려면 와 같이 입력하면 됩니다. C를 미리 공부하셨다면, C에서의 HelloWorld 예제랑 차이점을 몇가지 찾아낼 수 있을 것이고 이런 질문을 하겠죠.. ※ 일단, 헤더파일부터 다르네요. => 그거야 사용하는 함수가 다르니까 헤더파일이 다른 것이겠죠? C 언어에서는 printf 함수를 사용했다면, C++ 에서는 cout이라는 함수를 사용합니다. cout 함수를 사용하기 위해 "iostream"(input/output stream 이라는 뜻입니다.) 헤더파일을 인용한 것입니다. ※ 엥? 그렇다면 using namespace std; 는 뭐죠? 처음 보는 건데? => 이 질문을 받기..
[C] 이중 pointer 포인터도 실제로는 변수이기 때문에 메모리 주소를 구할 수 있습니다. 하지만 포인터의 메모리 주소는 일반 포인터에 저장할 수 없고, int **numPtr2;처럼 이중 포인터에 저장해야 합니다. int **numPtr2;를 영어로 읽으면 pointer to pointer to int가 됩니다(numPtr2 → numPtr1 → num1). 여기서 이중 포인터 numPtr2를 끝까지 따라가서 실제 값을 가져오려면 **numPtr2처럼 변수 앞에 역참조 연산자를 두 번 사용하면 됩니다. 즉, 역참조를 두 번 하므로 numPtr2 ← numPtr1 ← num1과 같은 모양이 되고 num1의 값을 가져올 수 있습니다. ▼ 그림 34‑25 이중 포인터의 역참조 포인터를 선언할 때 *의 개수에 따라서 삼중 포인터, ..
[C] pointer 증감연산자 구름EDU - 모두를 위한 맞춤형 IT교육 구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/ edu.goorm.io
[JAVA] 배열 오름차순 정렬 [Java] 자바 배열 정렬하기(오름차순, 내림차순) Arrays.sort() 자바에서 배열이나 리스트를 정렬하려고 한다면 java.util.Arrays 클래스의 sort() 메서드를 사용하시면 따로 정렬 로직을 짜지 않아도 한번의 메소드 호출로 간편하게 배열이나 리스트를 정렬할 수 coding-factory.tistory.com
[JAVA] ArrayList 메소드 [JAVA - 자료구조] ArrayList 메소드 | Junjangsee's Blog ArrayList ArrayList란 자료구조의 한 종류로서 Java에서 가장 많이 사용되는 데이터 스트럭쳐입니다. 알고리즘에서 많이 활용되며, 실무에서 데이터를 다룰 때 입출력하는 부분에서 매우 많은 비중을 junjangsee.github.io
[C] 파일 입출력 [C/C++] 파일에 정수 쓰기, 읽기 1] 파일에 정수 쓰기 (문제) 28, 34, 35, 43을 파일 "4num.txt"에 써라 - 형식 : fprintf(stream, "%d%d%d%d",a,b,c,d); #include FILE *fi; main(){ int a=28,b=34,c=35,d=43; fi=fopen("4num.txt","w");.. secrys.tistory.com 문자열 쓰기 C 언어 코딩 도장: 70.3 파일에 문자열 쓰기 지금까지 서식을 지정해서 파일에 문자열을 쓰거나 읽었습니다. 그럼 서식 없이 문자열을 그대로 쓰거나 읽을 수는 없을까요? fputs 함수를 사용하면 문자열을 그대로 파일에 쓸 수 있습니다(stdio dojang.io
[C++] class 클래스 (class) OOP의 가장 핵심적인 개념인 클래스는 "구조체가 확장 된 것"이라 생각하면 된다. C에서 구조체는 타입이 다른 변수의 집합이라 보았다면, C++에서 클래스는 타입이 다른 변수의 집합뿐만 아니라, 함수까지 포함 된 것이다. 선언 방법은 C의 구조체 선언문에서 struct 를 class로 바꾸면 되며, public 이나 private 와 같은 엑세스 지정자도 추가 할 수 있다. 생성자 (Constructor) 클래스를 선언하게 되면 그 클래스는 메모리에 객체로써 자리를 잡게 된다. 그러나, 이 객체는 해당 메모리에 자리만 잡고 있을 뿐이지, 초기화는 되지 않으므로, 생성자를 통해서 초기화를 해줄 필요가 있다. 기본적으로 객체를 선언하였다면, 객체를 이루는 변수들에 값을 대입함으로써 객..
[C&C++] header 파일 선언 이유 .cpp 파일로 만들어진 오브젝트 파일에 있는 함수들의 내용을 다른 소스 파일에서 사용할 수 있도록 하기 위함입니다. A.cpp 파일에서 B.cpp 파일에 들어있는 함수나 클래스를 사용하기 위해서는 함수의 프로토 타입이나 클래스 선언 등의 정보가 필요합니다. (그래야 어떤 함수(또는 메소드)를 호출할때 인자값이 필요하고, 안필요하고와 리턴 타입을 알 수 있으니까요.) 그런 정보들을 파악하기 위해서 헤더 파일을 만들어서 관리합니다. 그리고, 헤더파일의 사용에 대해서 질문하셨는데.. 이는 라이브러리를 생각하시면 간단합니다. 라이브러리와 같은 것들은 cpp 파일을 제공하지 않는 경우가 많기 때문입니다. 그리고, 무엇보다 관리와 공유가 편하다는 장점이 있습니다. :)
함수 선언 이유 엄연히 함수의 정의가 있는데 왜 선언이 필요할까...??? ​ 첫째, 함수 선언에서 반환값의 형태를 확인합니다. 컴파일러는 함수를 호출한 자리에 반환값과 같은 형태의 저장 공간을 준비합니다. 즉, 정수를 반환하면 호출한 자리에 int형 공간을 확보하고 실수를 반환하면 double형 공간을 확보합니다. 따라서 함수를 호출하기 전에 선언을 통해 반환형을 미리 컴파일러에게 알릴 필요가 있습니다. 물론 함수의 정의에서도 반환형을 확인할 수 있고 컴파일러는 위에서 아래로 한줄씩 컴파일하므로 함수 호출 이전에 함수를 정의하는 방법도 있습니다. ​ main 함수 위에 add함수를 정의하면함수의 정의에 원형이 포함되므로 따로 함수를 선언할 필요가 없습니다. 이 경우 실행 순서에는 변함이 없습니다. 프로그램은 항상 ma..
[C/C++] 포인터 반환 함수 먼저 함수 반환값의 자료형을 지정할 때 int *ten()과 같이 int 포인터로 지정했습니다. 그리고 변수를 선언하고 값을 할당한 뒤 변수의 메모리 주소를 반환합니다. 컴파일을 해보면 지역 변수의 주소를 반환한다면서 컴파일 경고가 발생합니다. 즉, num1은 함수 ten안에서만 사용할 수 있는 지역 변수이며 함수가 끝나면 사라집니다. 그래서 return &num1;과 같이 지역 변수의 주소를 반환하는 것은 잘못된 방법입니다. 초보자들은 이런 실수를 하기 쉬우니 꼭 기억하세요. 출력 결과에서 10이 잘 나오는 것은 예제 프로그램이 매우 간단해서 10이 저장된 변수가 덮어 쓰여지지 않았기 때문입니다(환경에 따라 10이 아예 안나올 수도 있습니다. 그때 그때 달라요). 프로그램이 커지고 복잡해지면 사라진 지..
[C/C++] 매크로 #, ## c언어 매크로 사용법 - #, ## 연산자 1. # 연산자 매크로에서 # 연산자는 문자열로 변환(치환) 시켜주는 연산자 입니다. 아주 단순한 예를 들어보았습니다. 아래의 예제를 한번 살펴보도록 하겠습니다. #include #define PRINT(s) printf(#s) norux.me
[C/C++] puts와 printf puts는 문자열 만 표시하는 데 사용됩니다. puts()는 const char * 출력에 특화된 함수 printf는 정수, 부동 소수점, 문자, 16 진수 값 및 문자열을 표시하는 데 사용됩니다. string1 = "apple" puts를 사용하여 표시 : puts (string1); printf를 사용하여 표시 : printf ( "% s", string1); 문자열로 작업 할 때는 printf보다 puts를 선호하지만 printf도 사용할 수 있습니다.
[JAVA] StringTokenizer 구분자 여러개 JAVA split, StringTokenizer 다수의 구분자 사용 구분자 여러개 사용하기 조건문에 처럼 |(shift + \, OR) 를 쓰니까 간단하게 된다 실습하면서 split과 StringTokenizer의 차이도 알게되었당 String str = "1@2#3@4&&5"; String aa[] = str.split("#|@|&"); Sys.. secr.tistory.com
[JAVA] String to int, int to String [JAVA] String to int, int to String 형변환 자바(JAVA) 형 변환(String과 int) Strinig to int String from = "123"; int to = Integer.parseInt(from); int to String int from = 123; String to = Integer.toString(from); nota.tistory.com
[JAVA] Scanner.useDelimiter java.util.Scanner 클래스의 useDelimiter 메서드 Scanner는 정규식 표현을 이용한 라인단위의 검색을 지원하며 구분자(delimiter)에도 정규식 표현을 사용할 수 있어서 복잡한 형태의 구분자도 처리가 가능하다. [스캐너 예제] 자바의 정석 Chapter 09 - velog.io
[JAVA] Iterator [Java] 자바 배열 전체 출력하는 5가지 방법 (Arraylist이용) : for문, iterator 사용 배열을 전체 보는 5가지 방법을 정리해 봅니다. For Loop (for 문) Advanced For Loop (상급 for 문) Iterator While Loop Collections’s stream() util (Java8) 이와 같이 5가지 방법이 있습니다. 이 다섯가지.. farcanada.tistory.com
[JAVA] 파일입출력 원리 1. 파일 객체를 만든다. 2. 해당 파일을 열어 읽는다. (+읽은 내용 알아서 처리, 어디다 쓰든지 문자열을 바꾸던지 뭐 맘대로 하면 된다.) 3. 파일을 닫는다. 자바 파일 입출력 (txt파일 한 문자씩, 한 줄씩, 한 번에 읽기) 자바 파일 입출력 원리 1. 파일 객체를 만든다. 2. 해당 파일을 열어 읽는다. (+읽은 내용 알아서 처리, 어디다 쓰든지 문자열을 바꾸던지 뭐 맘대로 하면 된다.) 3. 파일을 닫는다. 1) 한 문자씩 읽�� jeong-pro.tistory.com
[JAVA] 배열 길이