드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
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;
}
문제에는 메인 함수만 정의 되어있었습니다
풀어도 제대로 푼건지 모르겠네요 ㅠㅠ
댓글 분란 또는 분쟁 때문에
전체 댓글이 블라인드 처리되었습니다.
새로운 댓글이 없습니다.