[패스트캠퍼스 수강 후기] {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
패스트캠퍼스 올인원 패키지 : C++ 실력 완성 챌린지 참여 후기 (1) | 2020.12.10 |
---|---|
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {28} 회차 미션 (0) | 2020.11.29 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {26} 회차 미션 (0) | 2020.11.27 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {25} 회차 미션 (0) | 2020.11.26 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {24} 회차 미션 (1) | 2020.11.25 |