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)
    • ◼️React (0)
    • ◼️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 (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 클래스 기본 문법

2023. 9. 17. 22:16

클래스 기본 문법

클래스: 함수를 포함 할 수 있는 구조체

 

클래스 문법

class 클래스이름
{
접근제어지시자:
    멤버변수선언;
    멤버함수선언및정의;
};

구조체와의 차이점: 접근 제어지시자가 존재, 함수를 멤버로 포함할 수 있음.

 

멤버 선언 및 정의

- 클래스는 생성자를 이용해 멤버변수를 초기화할 수 있다.

- 생성자: 반환자료형이 없다. 호출하는 함수가 아니라 적절한 시기에 내부에서 자동으로 호출되는 함수.

 

생성자

//제작자 코드
class CTest
{
public:
  CTest()  //CTest 클래스의 '생성자 함수' 선언 및 정의
  {
    m_nData = 10;    //인스턴스가 생성되면 자동으로 초기화
  }
  
  int m_nData;  //멤버 데이터 선언.   
  //(생성자보다 밑에 있어도 클래스 내부에 선언되어있으면 생성자에서 사용할 수 있다.)
  
  void PrintData()  //멤버함수
  {
    cout << m_nData <<endl;    //멤버 데이터에 접근하고 출력
  }
};


//사용자 코드
int main(){
  CTest t;  //선언하면 생성자 함수가 호출된다.
  t.PrintData();
  
  return 0;
}

 

멤버함수 선언과 정의를 분리

함수 원형만 두고 나머지 몸체는 클래스 선언 외부에 별도로 정의한다. 

 

분리한 멤버함수 이름 앞에 소속 클래스 이름과 ::을 기술한다.

//제작자 코드
class CTest
{
public:
  CTest() 
  {
    m_nData = 10;   
  }
  
  int m_nData; 
  
  
  void PrintData(); // 멤버함수 선언, 정의 분리
  
};

void CTest::PrintData()  //외부에 분리된 멤버 함수 정의
{
  cout << m_nData <<endl;    //CTest 클래스의 멤버변수에 접근하는 것.
  
  //멤버함수의 식별자 검색 순서
  //(1) 지역변수 (2) 클래스의 멤버변수 (3) 전역변수
}

//사용자 코드
int main(){
  CTest t;
  t.PrintData();
  
  return 0;
}

 

생성자 함수에서 생성자 초기화 목록을 활용한 멤버변수 초기화

* 멤버변수가 참조자형식(int &data)이면 반드시 초기화 목록을 이용해 초기화 해야한다.

//제작자 코드
class CTest
{
public:
  //생성자 초기화 목록을 이용한 멤버 초기화
  CTest()   //함수원형
    :m_nData1(10), m_nData2(20)   //생성자 초기화목록
    //함수원형 다음에 콜론(:)을 기술한다. 
    //그리고 멤버변수(초기값) 형식으로 기술한다. 
    //초기화하려는 멤버 변수가 여러 개면 쉼표를 찍고 이어서 작성.
    //함수원형과 블록사이에 '생성자초기화목록'이 위치한다.
  { }  //블록
  
  int m_nData; 
  
  
  void PrintData(); // 멤버함수 선언, 정의 분리
  
};

void CTest::PrintData()  //외부에 분리된 멤버 함수 정의
{
  cout << m_nData <<endl;    //CTest 클래스의 멤버변수에 접근하는 것.
  
  //멤버함수의 식별자 검색 순서
  //(1) 지역변수 (2) 클래스의 멤버변수 (3) 전역변수
}

//사용자 코드
int main(){
  CTest t;
  t.PrintData();
  
  return 0;
}

생성자에 일일이 값을 기술하는 것이 귀찮다면 멤버변수 선언과 동시에 초기화 가능하다. (C++11부터 가능)

//제작자 코드
class CTest
{
public:
  
  //생성과 동시에 멤버변수 초기화
  int m_nData1 = 10;
  int m_nData2 = 20;
};
변수를 적절히 초기화 하는 것의 중요성

초기화를 사용자에게 맡겨도 좋겠지만 사용자가 별도로 값을 지정하지 않는다면 제작자가 적절한 값을 작성할 수 있게 해줌으로써 버그를 차단할 수 있다. 무엇보다 사용자는 매우 편리하게 객체를 사용할 수 있다.

 

더보기
 

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++] 생성자와 소멸자  (0) 2023.09.17
[C++] 클래스 접근 제어 지시자  (0) 2023.09.17
[C++] 객체지향 프로그래밍 개요  (0) 2023.09.17
[C++] 식별자 검색 순서  (0) 2023.09.07
[C++] 네임스페이스, using, 네임스페이스 중첩, 네임스페이스 다중정의  (0) 2023.09.06

    티스토리툴바