Creative Code

string3(string 클래스 개선) 본문

C++ Programming

string3(string 클래스 개선)

빛하루 2023. 9. 5. 10:51

※main.cpp파일

#include <iostream>

#include "string.h"



int main() {

	String s1;

	String s2 = "hello, world";     // String s2("hello,world");

	//String s2 = 0;						// NULL

	String s3 = s2;                 // String s3(s2);

	s1 = s2;

	

	String s4 = " IoT";

	s1 = s2 + s4;

	s1 = "hello, ";                 //String tmp("hello, ");

	

	if (s1 == s2) std::cout << "s1 and s2 are equal" << std::endl;

	else std::cout << "s1 and s2 are not equal" << std::endl;

	

	s4+= s4;

	s1 != s2;

	std::cout << "s1 : " << s1.c_str() << std::endl;

	std::cout << "s2 : " << s2.c_str() << std::endl;

	std::cout << "s2 len : " << s2.size() << std::endl;

	

	std::cout << "s3 : " << s3 <<std::endl;

	

	const String s5 = "hello";

	//s5 = "world";

	std::cout << "s5 len : " << s5.size() << std::endl;

	return 0;

}

※string.h파일

#ifndef STRING_H

#define STRING_H

#include <iostream>







class String {

friend std::ostream& operator<<(std::ostream& out, const String& rhs);

private:

	char *str;

	int len;

	void init_str(const char *str); // tool function, helper function(다른 멤버함수들에 의해서만 사용되는 함수)

	String(char *str, bool b);

public:

	String(const char *str=0);

	String(const String& str);

	~String();

	

	String& operator=(const String& rhs);

	String& operator=(const char* str);

	

	String& operator+=(const String& rhs);

	bool operator!=(const String& rhs) const;

	bool operator==(const String& rhs) const;           // const member function (객체에 대해서 read only)

	const String operator+(const String& rhs) const;

	const char* c_str() const;

	const int size() const;

	

};

#endif

※string.cpp파일

#include "string.h"

#include <cassert>

#include <cstring>





std::ostream& operator<<(std::ostream& out, const String& rhs) {

	out << rhs.str;

	return out;

}



void String::init_str(const char* str) {

	if (str) {

			this->str = new char[strlen(str)+1];

			assert(this->str);

			strcpy(this->str,str);

			this->len = strlen(str);

		} else {

			this->str = new char[1];

			assert(this->str);

			this->str[0] = '\0';

			this->len = 0;

		}	

}



String::String(char *str,bool b)  {

	this->str = str;

	this->len = strlen(str);

}



String::String(const char *str) {

	this->init_str(str);

}



String::String(const String& rhs) {

	this->init_str(rhs.str);

}



String::~String() {

	delete[] this->str;

}



const char *String::c_str() const{

	return this->str;

}



const int String::size() const {

	return this->len;

}



String& String::operator=(const String& rhs) {

	if (this != &rhs) {   		//self-assignment test!

		delete[] this->str;

		this->init_str(rhs.str);

	}

	return *this;

}



String& String::operator=(const char* str) {

	if (this->str != str) {

		delete[] this->str;

		this->init_str(str);

	}

	return *this;

}



bool String::operator==(const String& rhs) const{

	return (strcmp(this->str,rhs.str)==0);

}



const String String::operator+(const String& rhs) const {

	char *buf = new char[this->len + rhs.len+1];

	assert(buf);

	strcpy(buf,this->str);

	strcat(buf,rhs.str);

	String result(buf,true);

	//delete[] buf;

	return result;

}



String& String::operator+=(const String& rhs) {

	*this = *this + rhs;

	return *this;

}



bool String::operator!=(const String& rhs) const{

	return !this->operator==(rhs);

}

'C++ Programming' 카테고리의 다른 글

list2(linked list 클래스 연결)  (0) 2023.09.05
string4(reference counting사용)  (0) 2023.09.05
add.cpp(cin으로 입력받기)  (0) 2023.09.05
main.cpp(Rational클래스 라이브러리)  (0) 2023.09.04
main.cpp(타입캐스팅)  (0) 2023.09.04