무리스

반응형

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

 

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

벌써 24회차 데일리 미션이네요.

제가 알기론 데일리 미션은 28회차까지 있는걸로 알고 있는데

이제 정말 몇번 안남았네요 !

끝까지 열심히 해서 유종의 미를 거두도록 하겠습니다.

물론, 데일리 미션 후에도 최종 과제가 있기 때문에 데일리 미션 끝난 후에도

쭉~ 계속 공부를 해야겠죠.

그럼 오늘 24회차에서는 12강, 13강, 14강 순으로 공부해보도록 하겠습니다.

 

12강에서는 연산자 오버로딩 - 비교&관계 연산자 오버로딩에 대해 배워보도록 하겠습니다.

 

#pragma warning(disable : 4996)

#include <iostream>
#include <cstring>

using namespace std;

class String
{
private:
   char* _chars;
   
public:
   String(const char* chars)
      : _chars(new char[strlen(chars) + 1])
   {
      strcpy(_chars, chars);
   }
   
   bool operator==(const String& s) const
   {
      return strcmp(_chars s._chars) == 0;
   }
     
   bool operator==(const String& s) const
   {
      return !(this == s);
   }
   
   void print()
   {
      cout << _chars << endl;
   }
};

int main()
{
   String s0("abc");
   String s1("abc");
   
   if (s0 == s1)
      cout << "Eq " << endl;
   // ==, !=, <, >, <=, >=, <=>)
}

비교 연산을 사용해서 s0, s1의 관계를 출력해 보았습니다.

 

다음 13강에서는 연산자 오버로딩 - 논리 연산자 오버로딩에 대해서 알아보도록 하겠습니다.

시작 전에 논리 연산자는 오버로딩하기 매우 조심스러운 연산자라고 할 수 있는데요,

이론적으로는 가능하나 왜 위험한 지는 직접 해보면 알 수 있겠죠.

한번 해보겠습니다.

 

#pragma warning(disable:4996)

#include <iostream>
#include <cstring>
#

using namespace std;

class String
{
private:
   char* _chars;
   
public:
   String(const char* chars) : _chars(new char[strlen(chars) + 1])
   {
      strcpy(_chars, chars);
   }
   
   bool operator!() const
   {
      return strlen(_chars) == 0;
   }
};
int main()
{
   String s("");
   if (!s)
   {
      cout << "s" << endl;
   }
}

!s not 연산자는 잘 사용하지 않지만 작성해보았습니다.

다음은 or 연산자를 작성해보겠습니다.

#pragma warning(disable : 4996)

#include <iostream>
#include <cstring>

using namespace std;

class String
{
private:
   char* _chars;
   
public:
   String(const char* chars)
      : _chars(new char[strlen(chars) + 1])
   {
      strcpy(_chars, chars);
   }
   
   bool operator||(bool b) const
   {
      cout << "func" << endl;
      return strlen(_chars) > 0 && b;
   }
};
int main()
{
   String s0("");
   if (s0 || func())
   {
      cout << "!!" << endl;
   }
}

func 와 !!가 같이 출력됩니다.

이렇게 연산자를 사용해야된다가 아니라

이런식의 연산자 사용은 주의해야되는걸 보여드렸습니다.

 

다음 14강에서는 연산자 오버로딩 - 비트/입출력 연산자 오버로딩에 대해서 배워보도록 하겠습니다.

비트 연산자라고 하면 ~, &, |, ^. <<, >> 이런 연산자가 떠오르실 겁니다.

한번 작성해보겠습니다.

#include <iostream>

using namespace std;

class Vector
{
private:
   int x;
   int y;
   int z;
public:
   Vector(int x, int y, int z)
      : x(x), y(y), z(z)
   {
   
   }
   
   friend void operator<<(ostream& os, Vector& v)
   {
      os << v.x << " " << v.y << " " << v.z;
   }
   
   
};

int main()
{
   Vector v{1, 2, 3};
   cout << v; 
   // ~, %, ^, |, <<, >>
   

이런식으로 출력이 됐습니다.

어렵네요..

 

오늘도 이렇게 해서 24회차 데일리 미션 학습 기록을 끝냈습니다.

계속해서 연산자 오버로딩에 대해 공부를 하고있는데

개인적으로는 많이 어려운 부분이라고 느끼고 있습니다.

프로그래밍 비전공자다 보니 프로그램 용어가 참 개념 잡기도 힘들고

이해가 어려운 부분들이 있네요. 다음에 시간날 때는 용어 정리를 한번 해봐야겠습니다.

그럼 오늘도 공부하시느라 고생하셨습니다.

 

내일 25회차 데일리 미션으로 찾아뵙도록 하겠습니다.

이상입니다.

 

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

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

 

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

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

www.fastcampus.co.kr

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading