<C++ study> 5

[C++] 가상함수(Virtual Function)

#C++ #가상함수 C++ 에는 가상함수라는 개념이 있다. 같은 OOP 언어인 자바의 가상함수와 유사한데, 기본 클래스에서 가상 함수를 정의하여, 해당 기본 클래스를 상속 받는 파생 클래스가 해당 가상함수를 재정의하여 사용하도록 유도하여 Runtime 에 함수의 다형성을 높이기 위한 문법이라고 한다. 실행타임에 함수를 재정의해서 유용하게 사용할 수 있다는 것은 이해했는데, 의문점이 그냥 가상함수말고 일반적으로 함수 정의한 다음에 상속받은 클래스 단에서 오버라이드(재정의) 하여 사용하면 되지않나??? 라는 의문이었다. 정말 원론(?) 적인 이유는 다른 게시글 에 설명이 되어있었는데 엉뚱한 소멸자를 호출시키지않게 하기 위해서이다. C++ 개발 경험이 많이 없기 때문에 이러한 세세한 부분에 대해서는 생각해볼 ..

<C++ study> 2023.01.02

[C++] STL 사용 시, 일반 반복문과 반복자 사용의 시간 차이

1822번: 차집합 위 문제를 풀면서 시간제한이라는 벽에 봉착하였다. 문제는 그냥 두 집합을 비교해서 A집합에만 있는 요소들을 추출해내는 것이다. 처음에는 O(N^2) 의 시간복잡도를 갖는 일반 2중 for 문으로 해결하려 하였으나... input 값의 범위는 0 ~ 2147483647 인지라 시간초과가 안일어날 수가 없었다. 도저히 O(N^2) 밑으로 내릴 방법을 찾을 수가 없었는데, C++ 에도 Python 의 Dictionary 같은 것이 존재한다는 것을 알았다. map STL C++ 에서는 map 자료구조라고 하는데 vector 와는 내장함수가 유사하며, 기능은 Python 의 Dictionary 와 같다. 아무튼... 이 map 을 이용해서 O(N) 의 코드를 만들었는데 왜인지 시간초과가 뜬다?..

<C++ study> 2020.09.02

[C++] sort에서 cmp함수를 설정할 때 주의할 점

1181번: 단어정렬 위 문제를 풀 때, algorithm 헤더의 sort 함수로 문자열 순서를 정렬할 때, 마지막 인자로 비교함수를 커스텀해서 넣어주는 부분이 있는데 비교함수를 잘못만들어서 런타임에러로 한참을 헤맸다. 다른 부분에서도 문제가 없었는데 왜 런타임에러가 났는지 이 질문 글을 통해 알 수 있었다. bool cmp(string a,string b){ if(a.size()!=b.size()){ return a.size()

<C++ study> 2020.04.19

[C++]new와 참조자

new와 malloc 과 차별화 되는 특징은 바로 new로 메모리 공간을 할당하고 이름을 붙여준 곳을 변수로 간주할 수 있다는 것이다. 그래서 malloc과는 다르게 new 의 변수는 참조자로 참조가 가능하다. 소스로 공부하였다. #include#include#include#includeusing namespace std;typedef struct __Point {int xpos;int ypos;}Point;Point& PntAdder(const Point &p1, const Point &p2);int main(){Point * ptr1 = new Point;Point * ptr2 = new Point;ptr1->xpos = 1;ptr1->ypos = 2;ptr2->xpos = 3;ptr2->ypos =..

<C++ study> 2019.02.18

[C++]참조자를 이용한 Call-by-Reference

그냥 개인공부 끄적끄적글 C++ 에서는 함수에서 외부 선언 된 변수의 접근 방식이 두 가지가 있는데하나는 주소값(포인터)을 이용하는 것두 번째는 참조자(&)를 이용하는 것이다. 그리고 이 인자들을 어떻게 사용하느냐에 따라서Call-by-Value 와 Call-by-Reference가 갈린다. 간단하다. 인자를 참조하여서 값을 건드는 경우와 그냥 메모리 주소를 이용하는 것. 전자는 Call-by-Reference이고 후자는 Call-by-Value가 된다. 예제로 공부하였다. #include#include#include#includeusing namespace std;void SwapPointer(int *(&ref1), int *(&ref2)){cout

<C++ study> 2019.02.18
반응형