이번문제는 2차과제의 마지막 문제이고, 기초적인 문제입니다.
(2-8의 스케일이 커서 2-9를 먼저 올리는점 양해 부탁드립니다.)
Mystring이라는 class를 생성하고 연산자 오버로딩을 사용해서 cout의 기능을 통해 문자열+문자열을 만족시켜야하는 문제입니다.
오버로딩이라는 말은 수업이나 컴파일하면서 잠시 들어봤지만, 직접 사용해야합니다.
개념이 생소해서, 이번코드는 구글링을 많이했습니다.(이번과제 조교도 구글링하면 잘 나온다고 찾아보라고 했습니다.)
strcat등 문자열 함수를 사용해야해서 보안에는 취약하지만,
#define _CRT_SECURE_NO_WARNINGS
를 사용하고
Mystring이라는 class를 선언하고
class Mystring
{//Mystring class생성
private:
char my_arr[100] = { 0, };
public:
Mystring()
{
}//my_str1 생성자
Mystring(const char* string)
{//생성자
int length = strlen(string) + 1;
strcpy_s(my_arr, length, string);
}//main함수의 my_str2를 복사하기
cout을 하기위해서는 <<인 연산자가 필요하고, 문자열을 더하기 위해서 +인 연산자가 필요합니다.
+연산자를 사용하기위해 아래와 같은 class함수를 사용했습니다.
char* operator+(const char* string)
{
return strcat(my_arr, string);
}//'+'연산자 정의
그다음 <<연산자를 어떻게 해야할지 몰라서 구글링을 했습니다.
친구개념인 friend가 나오네요,,,
friend ostream& operator<<(ostream& out, const Mystring& obj)
{
out << obj.my_arr;
return out;
}//'<<'연산자 정의
친구개념도 잘 모르고 ostream함수도 잘 모르는데 알려주지도 않고, 배보다 배꼽이 더 큰 문제라고 느껴졌습니다.
뭐 어쨌든간에 main함수와 class함수를 종합하자면
#define _CRT_SECURE_NO_WARNINGS//strcat을 쓰기위해
#include<iostream>
#include<cstring>
#include <crtdbg.h>//strcat를 쓰기위해
using namespace std;
class Mystring
{//Mystring class생성
private:
char my_arr[100] = { 0, };
public:
Mystring()
{
}//my_str1 생성자
Mystring(const char* string)
{//생성자
int length = strlen(string) + 1;
strcpy_s(my_arr, length, string);
}//main함수의 my_str2를 복사하기
char* operator+(const char* string)
{
return strcat(my_arr, string);
}//'+'연산자 정의
friend ostream& operator<<(ostream& out, const Mystring& obj)
{
out << obj.my_arr;
return out;
}//'<<'연산자 정의
~Mystring()
{
}//소멸자
};
void main()
{
Mystring my_str;
Mystring my_str2("문의는 ");
my_str = my_str2 + "pwh7514@gmail.com으로 주세요";
cout << my_str;
}
이렇게 완성이 됩니다.
무사히 잘 구현된걸 확인할 수 있습니다 !
이번 2-9과제를 하면서 느낀점은
저는 이번에 Mystring이라는 class를 생성하고 이 문자열을 복사할 수 있는 생성자를 만들었습니 다. 복사할 수 있는 생성자로 my_str2에서 인자로 넘겨받은 “문의는 “을 복사시켰고, +연산자를 오버로딩을 시켜 my_str에 제가 원하는 문자열을 더했습니다. 하지만 cout<<이 처음에 문제를 일 으켰습니다. “<<”가 오류를 뜨는걸로봐서 “<<”도 연산자이고 오버로딩을 해줘야 된다고 생각을했 습니다. 하지만 + 연산자처럼 되지 않아 구글에 찾아보니 friend라는 키워드를 사용해서 “<<”를 오버로딩을 시켜야 했습니다. friend라는 개념을 처음써보았고, 오버로딩이라는 개념도 처음 써봤 습니다. 이것도 마찬가지로 잦은 연습으로 잘 쓸 수 있게하겠습니다.
라고 제가 작성했네요.
하지만 tistory에 올리면서 또 느낀점은
이번 과제는 강의에 문제가 있다라는 느낌을 받게 되었습니다.
강의에서 자세히 알려주지도 않는거를 구글링을 해서 찾아서 알아서 해결해라 이런식으로 나왔는데,
구글링해서 쓰는거랑 구글에서 copy하는거랑 도대체 뭐가 다른지 모르겠네요
타 과에 비교하자면 이 과는 좀 꼰대같은 문화가 많은것 같습니다.
타과는
1. 오픈소스 허용
2. copy? 케바케
3. 라이브러리 사용허용
요정도인데
실습강의(조교들이 진행하는 수업)가 퀄리티가 낮을뿐더러 요구사항은 많은데 하면 안되는건 많은과입니다.
솔직히 2-9를 작성을 끝내고 이런생각을 했다기보다는 학기중일때 3차과제까지 끝내고 이런생각을 정말 많이했습니다.
트렌디한 전공의 과제가 정보화시대에서 비정보화시대처럼 해결해라라...
모순적이네요
#이 문제의 출처는 kw대학교 컴퓨터정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.
2-7 대학교, 과, 학생정보에 관한 상속CLASS 만들기 (0) | 2021.08.06 |
---|---|
2-6 계좌관리 class 구현 (0) | 2021.08.05 |
2-5 클래스 선언 후, 문자찾기 (0) | 2021.08.04 |
2-4 9*9행렬을 3*3곱하기로 나눠서 연산 (0) | 2021.07.29 |
2-3 함수포인터 void(*fp)() 사용 (0) | 2021.07.20 |
댓글 영역