상세 컨텐츠

본문 제목

2-9 연산자 오버로딩 사용

과제

by 근성 2021. 8. 9. 11:05

본문

이번문제는 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학기 객체지향 프로그래밍 과제 문제입니다.

관련글 더보기

댓글 영역