728x90

c++ 256

C++] 가상함수 호출과 오버라이딩

#include using namespace std; class Base { public: virtual void f() { cout Base의 f()에 대한 모든 호출이 실행 시간 중에는 Derived의 f() 함수로 동적 바인딩. 가상함수(Virtual Function) virtual 키워드로 선언된 경우, 컴파일러에게 자신에 대한 호출 바인딩을 실행 시간까지 미루도록 지시 어느 클래스에서든 선언 가능함. 함수 오버라이딩(Function Overriding, 혹은 중복 ) 파생 클래스에서 기본 클래스의 가상 함수와 완전히 동일한 원형의 함수를 재정의 C++의 다형성 중 하나 기본 클래스의 포인터, 파생 클래스의 포인터를 이용하더라도 가상함수를 호출하면 파생 클래스에 오버라이딩된 함수가 항상 실행됨

C++] 일반화와 템플릿

template 키워드를 사용하면 중복함수들을 일반화시킨 특별한 함수 생성이 가능하다.이를 템플릿함수(template function) 혹은 제네릭함수(generic function)라고 한다.C++에서의 템플릿은 함수와 클래스 코드를 일반화시키는 도구 템플릿 함수나 클래스를 작성할 경우,template이란 키워드를 사용하여 로 제네릭 타입 T를 선언한다. 중복함수를 템플릿화하는 과정의 역과정을 구체화라 하며,컴파일러는 함수의 호출문을 컴파일하는 경우 구체화를 통해구체적인 함수의 소스코드를 생성해내며, 이를 구체화된 함수라 한다. #include using namespace std; class Circle { int radius; public: Circle(int radius = 1) { this->ra..

백준 알고리즘] 7576 : 토마토(한국정보올림피아드)

https://www.acmicpc.net/problem/7576 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일수를..

백준 알고리즘] 2193 : 이친수

https://www.acmicpc.net/problem/2193 알고리즘이 복잡한 건 없다.알고리즘에 대해서 지식이 전무한 사람은 모든 케이스를 테스트하려고 하지만,기본적으로 숫자길이를 확장해나가는 것에 있고,이전의 값을 바탕으로 답을 구해나갈 수 있다는 점을 감안하면 쉽게 풀어낼 수 있다. 숫자의 자릿수가 늘어날 때마다, 이전에 판단했던 이친수에서얼마나 많은 이친수를 만들어낼 수 있는지에 관한 점화식을 작성하기만 하면 된다.복잡한 2차원 테이블을 작성하는 것도 아니라서 비교적 쉬운 편이다. 유의해야 하는 점 하나는,n값이 커지면 int 범위를 넘어가기 때문에여기서 long long int를 사용했던 것처럼 이를 담아낼 수 있는 적합한 자료형을 사용해야 한다는 점이다. 123456789101112131..

Data Structure] 스택 클래스를 일반화한 제네릭 클래스

템플릿 이용해서 스택을 일반화해봤다. 클래스 활용도 연습을 해볼 겸, 템플릿 사용도 연습을 해볼 겸...다른 기능 없이 아주 일반적인 push, pop, 생성자만 구현했다.다음엔 리스트도 해볼 생각. #include using namespace std; template class Stack { int tos; T data[100]; public: Stack(); void push(T element); T pop(); }; template Stack::Stack() { tos = -1; } template void Stack::push(T element) { if (tos == 99) { cout

C++] 다중상속(Multiple Inheritance)

Multiple Inheritance;다중상속 하나의 파생 클래스가 여러 클래스를 동시에 상속 받는 경우를 말하며,그 효용성에 비해 반대급부가 커서 사용하지 않는 편이며,C#, Java에서는 지원하지 않음. 여러 클래스를 상속받아 재사용과 효율을 높일 수 있겠지만,치명적인 문제를 가지고 있음 12345678910111213141516171819202122232425262728293031#include using namespace std;class BaseIO{public: int mode;};class In : public BaseIO{public: int readPos;};class Out : public BaseIO{public: int writePos;};class InOut : public In,..

C++] RTTI(Run-Time Type Information)

RTTI(Run-Time Type Information)실행 중 객체의 타입과 관련된 정보를 알아내는 기법실행 중 포인터가 가리키는 객체의 실제 타입을 알아야 하는 경우,클래스가 상속 관계에 있을 때 포인터가 가리키는 객체가 파생클래스의 객체인지기본클래스의 객체인지 판단해야 하는 경우, RTTI 기법을 이용해 알아낼 수 있다.RTTI 활용을 위해서는 typeinfo 헤더를 포함시켜야 함. type_info 클래스는 typeid 연산자에 의해 반환되는 정보로,타입 이름과 같은 타입에 관한 정보를 가진 클래스임 123456789class type_info{public: bool operator==(const type_info& rhs); bool operator!=(const type_info& rhs); ..

728x90