[패스트캠퍼스 수강 후기] {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++실력완성} 100% 환급 챌린지 {26} 회차 미션 (0) | 2020.11.27 |
---|---|
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {25} 회차 미션 (0) | 2020.11.26 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {23} 회차 미션 (0) | 2020.11.24 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {22} 회차 미션 (0) | 2020.11.23 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {21} 회차 미션 (0) | 2020.11.22 |