무리스

반응형

[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {27} 회차 미션

 

안녕하세요. 무리스입니다.

오늘은 주말이라 본가에 왔습니다.

본가가 4시간거리에 있어 버스를 타고 멀리 있지만 그래도 데일리 미션을 놓칠 수 없기때문에

무거운 노트북을 챙겨왔습니다. 밑에 지방은 확실히 덜 추운 것 같네요.

간만에 배부르게 집밥을 먹고 패스트캠퍼스 환불챌린지 27회차를 하기 위해

노트북을 켰습니다. 그러면 오늘은 27회차 학습기록을 시작해보도록 하겠습니다.

27회차에서는 21강, 22강, 23강 순으로 진행됩니다.

 

21강에서는 상속 - 가상 함수에 대해서 배워보도록 하겠습니다.

가상 함수라는 것은 함수에 버추얼을 선언하는건데요,

 

버추얼을 붙이는 것과 안붙이는 것에 대해서 알아보겠습니다.

식을 통해 한번 작성해보도록 하겠습니다.

 

#include <iostream>

using namespace std;

class Base
{
public:
   void func()
   {
      cout << "Base" << endl;
   }
};

class Derived : public Base
{
public:
   void func()
   {
      cout << "Dervied" << endl;
   }
};

int main()
{
   Base b;
   Derived d;
   
   b.func(); // Base 출력 예상
   d.func(); // Dervoed 출력 예상 
}
   

 

그러면 조금 더 추가해보도록 하겠습니다.

#include <iostream>

using namespace std;

class Base
{
public:
   virtual void func()
   {
      cout << "Base" << endl;
   }
};

class Derived : public Base
{
public:
   void func()
   {
      cout << "Dervied" << endl;
   }
};

void foo(Base& base)
{
   base.func();
}

int main()
{
   Base b;
   Derived d;
   
   b.func(); // Base 출력 예상
   d.func(); // Dervoed 출력 예상 
 
   
   Base& b0 = d;
   b0.func(); // Derived
   
   Base* b1 = &d;
   b1->func(); // Derived
   
   foo(d);
}


}
   

이 상태에서 실행을 하게 되면 아래의 Derived가 출력됩니다.

이게 virtual을 붙인 가상 함수입니다.

 

다음 22강에서는 상속 - 정적 결합 / 동적 결합에 대해서 배워보도록 하겠습니다.

정적 결합은 스태틱 바인딩이라고 하는데요, 기본적으로 스태틱이라는 단어는 프로그램에서

컴파일 타입을 의미할 때가 많습니다. 런타임(실행중)이 아니라 실행 전에 이미 무언가가 결정이 되었을 때

스태틱 바인딩 정적 결합이라고 하고 대표적으로 오버로딩이 있습니다.

 

동적 결합은 다이나믹 바인딩인데 프로그램에서 런타임 도중을 의미할 때가 많습니다.

동적 결합의 대표적으로는 오버라이딩이 있습니다.

 

연산자 오버로딩부터 해보겠습니다.

#include <iostream>

using namespace std;

class A
{
public:
   int num;
};

class B : public A
{

};

A operator+(const A& x, const A& y)
{
   A a;
   a.num = x.num = y.num;
   return a;
}

int main()
{
   A a0, a1;
   a0.num = 10;
   a1.num = 20;
   
   A a2 = a0 + a1
   cout << a2.num << endl;
}

30이 출력되는 것을 확인할 수 있습니다.

오버로딩은 정적 결합이라는 것을 알고 있으시면 됩니다.

동적 결합은 virtual을 활용해서 작성할 수 있습니다.

 

다음 23강에서는 상속 - 추상 클래스 / 순수 가상 함수에 대해 알아보도록 하겠습니다.

추상 클래스라는 것은 한 가지 이상의 순수 가상 함수가 있는 클래스를 추상 클래스라고 합니다.

추상 클래스는 객체(인스턴스)화 할 수가 없습니다.

먼저 어떤 것이 있는지 알아보겠습니다.

 

#include <iostream>

using namespace std;

class Shape
{
public:
   virtual double getArea() const = 0 // 순수 가상 함수
   virtual ~Shape() {}
};

class Circle : public Shape
{
private:
   double _radius;
   
public:
   Circle(double radius)
      : _radius(radius)
   {
   
   }
   
   virtual double getArea() const
   {
      return _radius * _radius * 3.14;
};

class Rectangle : public Shape
{
private:
   double _width;
   double _height;
   
public:
   Rectangle(double width, double heght)
      : _width(width), _height(height)
   {
   
   }
   
   virtual double getArea() const override
   {
      return _width * _height;
   }
};

class AreaAverage
{
private:
   double _total = 0;
      int _size = 0;
      
public:
   double operator()(Shape& shape)
   {
      _size += 1;
      _total += shape.getArea();
      return _total / _size;
   }

int main()
{
  Circle c(1); 
  cout << c.getArea() >> endl;
  
  
  AreaAverage aavg;  
  cout << aavg(c) << endl;
  cout << aavg(r) << endl;
  
}

이런 식으로 계산되어 출력되었습니다.

추상클래스를 파라미터로 받아서 넘겨주면 관심있는 Area만 넘길 수 있습니다. 

 

이렇게 해서 오늘도 27회차 학습 기록을 다 했습니다.

제가 알기론 내일이 데일리미션은 마지막이라고 알고있습니다 !

주말 여유있는 시간을 이용해 이번 한 주동안 공부했던 것들을 복습하는 시간을

가지면 좋을 것 같네요. 저도 복습 좀 해야겠습니다. 

 

그럼 토요일 하루 잘 마무리하시고 내일 28회차로 찾아뵙겠습니다.

이상입니다.

 

패스트캠퍼스 C++ 강의 링크를 걸어두겠습니다. 참고하세요~

올인원 패키지 : C++ 실력 완성 bit.ly/33beaFj

 

C++ 실력 완성 올인원 패키지 Online. | 패스트캠퍼스

선데이토즈, ICON Foundation 출신 Core 개발자가 직접 알려주는 C++의 모든 것. 애니팡 게임을 직접 만들어 보며 어려운 C++의 원리를 이해하고 실무에서 쓸 수 있는 수준까지 만들어 드립니다.

www.fastcampus.co.kr

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading