minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (3)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • NextJSSwagger
  • 구조체매개변수
  • 그램업그레이드
  • 인공지능개발자
  • AI배워야하나
  • 19년식그램SSD장착
  • SpringBootSwagger
  • kafka구축
  • GSLB
  • 그램풀스팩업그레이드
  • 리눅스파티션
  • API문서정리
  • hello테마
  • 티스토리폰트배경색없애기
  • 이것이C++이다책참고
  • OpenGL회전
  • 이차원구조체배열포인터
  • mfc
  • 19년식그램램장착
  • 구조체배열포인터

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 클래스 요구사항에 맞게 코드 구현하기

2023. 9. 17. 22:35

요구사항에 맞게 코드 구현하기

더보기

SetString() 메서드 정의할 때주의사항

- 매개변수로 전달된 문자열의 길이를 측정하고 m_nLength에 저장합니다.

- 매개변수로 전달된 문자열이 저장될 수 있는 메모리를 동적 할당합니다. (new 연산자를 이용할 것)

- 동적 할당한 메모리에 문자열을 저장(m_pszData)합니다.

- 매개변수가 NULL이거나 문자열의 길이가 0인 경우를 고려해야합니다.

- 여기서 동적할 당한 메모리는 언제 어디서 해제하는지 생각하고 대응합니다.

- 사용자가 다음예와 같이 이 함수를 2회 호출하는 경우를 생각하고 대응합니다.

(a.SetString("Hello"); a.SetString("World");)

 

Release() 메서드 정의할 때 주의사항

- m_pszData라는 멤버 변수가 가리키는 메모리를 해제합니다. (delete 연산자를 이용할 것)

- 사용자 코드에서 접근이 허용된 메서드들은 무엇이든 호출할 수 있으며 그 순서는 임의로 달라질 수 있다. 가령 Release()메서드를 호출한 직후 SetString() 함수를 호출할 수 있는 것이죠. 이 같은 상황을 고려하면서 코드를 작성합니다. 

 

/*MyString.h*/
class CMyString
{
public:
  CMyString();
  ~CMyString();
private: 
  //문자열을 저장하기 위해 동적 할당한 메모리를 가리키는 포인터
  char* m_pszData;
  
  //저장된 문자열의 길이
  int m_nLength;
public:
  int SetString(const char* pszParam);
  const char* GetString();
  void Release();
};



/*MyString.cpp*/
#include "stdafx.h"
#include "MyString.h"

CMyString::CMyString()
: m_pszData(NULL)
, m_nLength(0)
{
}

CMyString::~CMyString()
{
  //객체가 소멸하기 전에 메모리를 해제한다.
  Release();
}

int CMyString::SetString(const char*pszParam)
{
  //새로운 문자열 할당에 앞서 기존 정보를 해제한다.
  Release();
  
  //NULL을 인수로 함수를 호출했다는 것은 메모리를 해제하고
  //NULL로 초기화하는 것으로 볼 수 있다.
  if(pszParam==NULL)
  	return 0;
  
  //길이가 0인 문자열도 초기화로 인식하고 처리한다.
  int nLength = strlen(pszParam);
  
  if(nLength==0)
    return 0;
    
  //문자열의 끝인 NULL문자를 고려해 메모리를 할당한다.
  m_pszData = new char[nLength + 1];
  
  //새로 할당한 메모리에 문자열을 저장한다.
  strcpy_s(m_pszData, sizeof(char)*(nLength+1), pszParam);
  m_nLength = nLength;
  
  //문자열의 길이를 반환한다.
  return nLength;
}

void char* CMyString:GetString()
{
  return m_pszData;
}

void CMyString::Release(){
  //이 함수가 여러번 호출될 경우를 고려해 주요 멤버를 초기화한다.
  if(m_pszData !=NULL)
    delete[] m_pszData
    
  m_pszData = NULL;
  m_nLength = 0;
}
  • strlen(char*) : char배열 문자열길이를 구한다. (null빼고)
  • strcpy_s(char * (저장할변수), sizeof(char)*len, char* (복사대상)) :문자열 복사

 

 

더보기
 

Visual Studio C++ 사전

c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용

genius-duck-coding-story.tistory.com

 

 

 

'◼️C++' 카테고리의 다른 글

[C++] delete 예약어를 이용한 명시적 메서드 삭제  (0) 2023.09.17
[C++] 상수형 메서드, mutable, const_cast< >  (0) 2023.09.17
[C++] 메서드, this 포인터  (0) 2023.09.17
[C++] 명시적 디폴트 생성자  (0) 2023.09.17
[C++] 생성자 다중정의  (0) 2023.09.17

    티스토리툴바