게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C++ 교재에 있는 문제를 풀다가........
게시물ID : computer_14395짧은주소 복사하기
작성자 : 마약파리소녀
추천 : 0
조회수 : 714회
댓글수 : 3개
등록시간 : 2011/08/15 14:06:29
교재에 답이 없네요 ㅠㅠ

코드가 약간 길수도 있겠으나 시간이 있으신 분들은 한번보고 평가좀 해주셨으면 감사하겠습니다 
(--)(__)(--)(__)


// string.h 
#include<iostream>           
#include<cstring>

using namespace std;

class CString
{
public:
CString(char *s = "Unknown"); // 생성자
CString(char *s, const CString &str);

CString(const CString &str); // 복사 생성자
CString& operator=(const CString &str); // 대입연산자 오버로딩
CString operator+(const CString &str); // +연산자 오버로딩
CString& operator+=(const CString &str); // += 연산자 오버로딩
bool operator==(const CString &str); // ==  연산자 오버로딩

~CString(); // 소멸자

friend ostream& operator<<(ostream &out, const CString &str); // friend 함수 선언
friend istream& operator>>(istream &in, CString &str);

private:
int mLen;
char *mStr;
};

ostream& operator<<(ostream &out, const CString &str);
istream& operator>>(istream &in, CString &str);

//string.cpp
#include"string.h"

CString::CString(char *s) // 생성자
{
mLen = strlen(s);
mStr = new char [mLen + 1];
strcpy(mStr, s);
}

CString::CString(char *s, const CString &str)
{
mLen = strlen(s) + str.mLen;
mStr = new char [mLen + 1];
strcpy(mStr, s); // 멤버함수 mStr에 s복사
strcat(mStr, str.mStr); // 다시 mStr에 s2 추가
}

CString::CString(const CString &str) // 복사 생성자
{
mLen = str.mLen;
mStr = new char [mLen];
strcpy(mStr, str.mStr);
}

CString& CString::operator=(const CString &str) // 대입연산자 오버로딩
{
delete [] mStr; // 가지고 있던 mStr 해제 후 재 할당

mLen = str.mLen;
mStr = new char [mLen + 1];
strcpy(mStr, str.mStr);

return (*this); // 현재 객체 반환
}

CString CString::operator+(const CString &str) // +연산자 오버로딩
{
return CString(mStr, str.mStr);
}

CString& CString::operator+=(const CString &str) // += 연산자 오버로딩
{
char *cTemp = new char [mLen+1]; // 임시 포인터
strcpy(cTemp, mStr); // 임시 포인터에 호출한 객체의 mStr을 복사

delete [] mStr; // 호출한 객체의 mStr해제

mLen = mLen + str.mLen;
mStr = new char [mLen + 1]; // mStr 다시 할당

strcpy(mStr, cTemp);
strcat(mStr, str.mStr);

delete [] cTemp; // 임시 포인터 해제

return (*this); // 현재 객체를 반환
}

bool CString::operator==(const CString &str) // ==  연산자 오버로딩
{
if(strcmp(mStr, str.mStr) == 0)
return true;   // 두 객체의 멤버 포인터 값이 동일할경우 return true;
else
return false; // 다를 경우 return false;
}

CString::~CString() // 소멸자
{
delete [] mStr; // 메모리 해제
}

ostream& operator<<(ostream &out, const CString &str) // friend 함수 선언
{
out << str.mLen << "\t" << str.mStr << endl;

return out;
}

istream& operator>>(istream &in, CString &str)
{
in >> str.mStr;

return in;
}

//main.cpp
#include"string.h"

int main(void)
{
CString str1 = "Good";
CString str2 = "Morning";
CString str3;

str3 = str1 + str2;

cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;

str1 += str2;

if(str1 == str3)
cout << "equal!" << endl;

CString str4;

cout << "문자열 입력 : ";
cin >> str4;

cout << "입력된 문자열 : " << str4 << endl;

return 0;
}

문제에는 메인 함수만 정의 되어있었습니다

풀어도 제대로 푼건지 모르겠네요 ㅠㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호