Guest User

Untitled

a guest
Aug 15th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. //
  2. // CMyString.cpp
  3. // cppToBitcore
  4. //
  5. // Created by 곽대용 on 2018. 8. 11..
  6. // Copyright © 2018년 dany. All rights reserved.
  7. //
  8.  
  9. #include "CMyString.hpp"
  10. #include "string.h"
  11.  
  12. CMyString::CMyString():m_pszData(NULL), m_nLength(0){}
  13.  
  14. CMyString::CMyString(const CMyString &rhs){
  15. m_nLength = rhs.m_nLength;
  16. m_pszData = new char[rhs.m_nLength +1];
  17. strcpy(m_pszData, rhs.m_pszData);
  18.  
  19. //this -> setString(rhs.getString());
  20. }
  21.  
  22. CMyString::~CMyString(){
  23. Release();
  24. }
  25.  
  26. CMyString& CMyString::operator = (const CMyString &rhs){
  27. if(this != &rhs){
  28. this->setString(rhs.getString());
  29. }
  30. return *this;
  31. }
  32.  
  33. int CMyString::setString(const char* pszParam){
  34. //연속된 문자열 set 방지
  35. Release();
  36.  
  37. if(pszParam == NULL){
  38. return 0;
  39. }
  40.  
  41. //visual studio에서 사용하는 함수와 xcode에서 사용하는 함수가 다르다.(라이브러리)
  42. //visual studio에서는 stdafx.h 라이브러리에서 함수를 쓰지만 xcode에서는 string.h가 제공되는데, 함수가 조금씩 다르다.
  43.  
  44. //strlen 함수의 경우, vs에서는 int를 리턴하지만 xcode에서는 size_t 라는 타입을 리턴해서, 캐스팅을 해줘야 한다..
  45. int nLength = static_cast<int>(strlen(pszParam));
  46.  
  47. if(nLength == 0){
  48. return 0;
  49. }
  50.  
  51. //문자열을 저장하기위한 크기의 메모리 할당(마지막에 null 올까봐 크기하나더 할당)
  52. m_pszData = new char[nLength + 1];
  53.  
  54. //할당한 메모리에 문자열 저장
  55. //vs와 받는 인자값이 다르다. xcode에서는 문자열의 길이를 받지 않는다. 저장할 메모리와 문자열만 저장.
  56. strcpy(m_pszData, pszParam);
  57.  
  58. //문자열 길이 저장
  59. m_nLength = nLength;
  60.  
  61. //저장한 문자열 길이 리턴
  62. return nLength;
  63. }
  64.  
  65. const char* CMyString::getString() const{
  66. return m_pszData;
  67. }
  68.  
  69. void CMyString::Release(){
  70. //없는데 호출할 경우 예외처리
  71. if(m_pszData != NULL){
  72. //char 배열이기때문에 메모리 이렇게 비워야 한다.
  73. delete[] m_pszData;
  74.  
  75. m_pszData = NULL;
  76. m_nLength = 0;
  77. }
  78.  
  79. }
  80.  
  81. ///////////////////////////////
  82.  
  83. //
  84. // CMyString.hpp
  85. // cppToBitcore
  86. //
  87. // Created by 곽대용 on 2018. 8. 11..
  88. // Copyright © 2018년 dany. All rights reserved.
  89. //
  90.  
  91. #ifndef CMyString_hpp
  92. #define CMyString_hpp
  93.  
  94. #include <stdio.h>
  95.  
  96. //hpp에는 클래스와 멤버들을 '선언'
  97. class CMyString{
  98. public:
  99. CMyString();
  100. ~CMyString();
  101. CMyString(const CMyString &rhs);
  102.  
  103. private:
  104. //문자열을 저장하기 위해 동적 할당한 메모리 포인터
  105. char* m_pszData;
  106. //저장된 문자열 길이
  107. int m_nLength;
  108. public:
  109. int setString(const char* pszParam);
  110. const char* getString() const;
  111. void Release();
  112. CMyString& operator = (const CMyString &rhs);
  113. };
  114.  
  115. #endif /* CMyString_hpp */
  116.  
  117. //////////////////////////////////////
  118.  
  119. //
  120. // main.cpp
  121. // cppToBitcore
  122. //
  123. // Created by 곽대용 on 2018. 7. 22..
  124. // Copyright © 2018년 dany. All rights reserved.
  125. //
  126.  
  127. //c++ 에서 사용하는 객체를사용하는데 이 헤더가 필요하다.
  128. #include <iostream>
  129. #include "CMyString.hpp"
  130.  
  131. using namespace std;
  132.  
  133. int main(int argc, const char* argv[]) {
  134. CMyString strData, strTest;
  135. strData.setString("Hello");
  136.  
  137. strTest.setString("World");
  138.  
  139. //복사생성
  140. CMyString strNewData(strData);
  141. cout << strNewData.getString() << endl;
  142.  
  143. //단순 대입 연산자 호출
  144. strNewData = strTest;
  145. cout << strNewData.getString() << endl;
  146.  
  147.  
  148. return 0;
  149. }
Add Comment
Please, Sign In to add comment