반응형

분류 전체보기 430

[c++] Generic 프로그래밍과 Template

int compare(string& v1, string& v2){ if (v1 기능적으로 같지만 타입이 다르기 때문에 이렇게 세개의 함수를 만들어주고 있습니다. 정수는 정수, 실수는 실수, 문자열은 문자열 이런식으로 되어 있는데요. 논리적으로는 완전히 똑같은데 데이터의 타입이 다르기 때문에 이렇게 해주는 것입니다. 이것은 똑같은 로직인데 데이터의 타입이 다르다는 이유만으로 똑같은 함수 여러개를 만들어야 한다는 것은 조금 짜증나는 일입니다.  그래서 c++은 template를 제공하는데요. Templatetemplate int compare(T& v1, T& v2){ if (v1 template는 실제 객체가 아니라 실제 객체의 틀이라고 보면 됩니다. 붕어빵이 있을 때 붕어빵을 만드는 틀이라고 생각하시면 ..

[c++] 순수 가상 함수, 추상 기본 클래스, 인터페이스 클래스

순수 가상 함수virtual void speak() const = 0; 부모 클래스에서 자식 클래스에 특정 함수를 만들고 싶을 때 이것을 쓰는 것입니다.  그러면 만약에 speak()를 깜빡했을 때 오류가 뜨게 되는 것입니다. 이것이 바로 순수 가상 함수를 사용하는 이유입니다. 즉 자식 클래스가 깜빡할 경우를 대비해서 경고 표시를 만들어주는 것이라고 보면 됩니다.  class를 설계할 때 구조를 도와주는 것이라고 보면 됩니다. 다이아몬드 상속문제#include #include using namespace std;class PoweredDevice{public: int m_i; PoweredDevice(int power) { cout   전체코드입니다.class PoweredDevice{public: i..

[C++] 가상 소멸자

class A{public: virtual void print() final { cout 이렇게 final을 해주면 밑에서 override를 해주지 못하도록 막아버리는 것입니다. 이렇게 뒤면 밑에 override하는 것들이 다 막히는 것을 볼 수 있습니다.  가상소멸#include using namespace std;class Base{public: ~Base() { cout 이렇게 할경우 메모리 누수가 발생하게 됩니다. Derived를 소멸자 작업을 하지 않았기 때문인데요. class Base{public: virtual ~Base() { cout 여기서 ~Base를 virtual로 만들어주면 정상적으로 자식 소멸자가 실행되고 부모클래스가 실행이 되는 것을 볼 수 있습니다.

[c++] virtual 함수

#include using namespace std;class A{public: void print() { cout 여기서 ref.print()를 하면 A가 나옵니다. B가 나올 것 같은데 A가 나오는 것을 볼 수 있으며 c를 넣어도, d를 넣어도 똑같이 A가 나옵니다.  Virtual 사용#include using namespace std;class A{public: virtual void print() { cout 하지만 virtual로 넣어주면 B가 나오는 것을 볼 수 있습니다. 이렇게 작동하는구나 라는 것을 알아두시면 됩니다.  class C : public B{public: virtual void print() { cout 이렇게 virtual 간에 타입이 다르다면 오류가 뜨는데요. return..

[c++] 상속받은 함수를 오버라이딩 하기

#include using namespace std;class Base{protected: int m_i;public: Base(int value) : m_i(value) {} void print() { cout   cout (b)이렇게 해주면 위에 있는 operator  상속받은 함수를 감추기using Base::m_i; 이것을 Derived에 넣어주면 m_i가 Derived안에서 public이 되어 버립니다. 이것이 상속된 유도 클래스에서 바꿀 수도 있습니다. class Derived : public Base{private: double m_d;public: Derived(int value) : Base(value) {} using Base::m_i;};이렇게 사용해주면 되는 것입니다. 그러면 ..

[c++] 따배시 상속과 접근 지정자

class Base{public: int m_public;protected: int m_protected;private: int m_private;};int main(){ Base base; base.m_public = 123; base.m_protected = 123;}protected는 class 밖에서 접근을 할려하니 오류가 발생합니다. base.m_protected는 불가능한데요. 당연히 private는 안되는 것을 알고 계실 것이라 생각합니다.  protected는 상속된 곳에서 접근이 되느냐 안되느냐가 public이랑 차이입니다. #include using namespace std;class Base{public: int m_public;protected: int m_protected;priv..

[따배시 11.1 c++] 상속의 기본1

Constructor를 해주는 이유는 메모리가 할당될 때 initializer를 해주기 위한 것입니다.  class Mother{public: int m_i;};class Child : public Mother{public: Child() { this -> m_i = 10; }};이렇게 상속을 받은 것을 this -> 로도 가능합니다.  상속을 받으면 자기 거가 되는 것입니다. 하지만 초기화는 불가능한데요.   class Child : public Mother{public: Child() : m_i(1024) { this -> m_i = 10; this -> Mother::m_i = 1024; }};여기서 초기화를 하면 오류가 발생합니다. 왜 초기화는 안되냐고 생각을 할 수 있습니다.   #inc..

[c++] 2702번 초6 수학

문제  코드#include #include using namespace std;int gcd(int a, int b){ if (a % b == 0) return b; return gcd(b, a % b);}int lcm(int a, int b){ return a * b / gcd(a, b);}int main(){ int n; cin >> n; int x, y; for (int i = 0; i > x >> y; cout  알고리즘 int gcd(int a, int b){ if (a % b == 0) return b; return gcd(b, a % b);}바로 gcd를 구하는 코드를 알면 쉽게 풀 수 있지만 이에 대한 코드가 모르면 갈피를 잡지 못할 수 있습니다.  유클리드 알고..

[c++] 2903번 중앙 이동 알고리즘

문제https://www.acmicpc.net/problem/2903 코드#include #include using namespace std;int n;int main(){ cin >> n; int dot = 2; while (n--) { dot = dot * 2 - 1; } cout (pow(dot, 2))  설명 주어진 도형을 잘 보면 2 * 점의 개수 -1 순으로 증가를 하는 것을 볼 수 있습니다. 이것을 바탕으로 while문을 걸어준 다음 pow(dot, 2)) 혹은 dot * dot를 출력해주시면 답은 나옵니다. 간단한 문제라 점의 개수가 어떻게 증가하는지 여부만 파악한다면 쉽게 풀 수 있는 문제였습니다. 예제 실행 흐름 만약 n = 3을 입력받으면: 1. 초기 dot = 2. 2. 첫 번째 ..

[C++] 2720번 세탁소 사장 동혁

문제 코드#include using namespace std;int main(){ int n, j; int arr[4] = { 25, 10, 5, 1 }; cin >> n; int a, b, c, d; for (int i = 0; i > j; a = j / arr[0]; j -= a * arr[0]; b = j / arr[1]; j -= b * arr[1]; c = j / arr[2]; j -= c * arr[2]; d = j / arr[3]; j -= d * arr[3]; cout  문제 해설금액을 각각의 동전 단위로 나누어서 최소 동전을 환산하는 것입니다. 이같은 경우 탐욕적 알고리즘을 사용하면 금방 풀 수 있습니다.  일단 저는 그냥 흐름대로 코딩을 작성하여서 제 코드가 최선의 알..

반응형