본문 바로가기

Study/C++

[C++] Class & Object

Class & Object

  • 클래스와 구조체의 차이점은 struct 키워드 대신 class 키워드를 사용한다는 것이다. 이러한 클래스는 앞선 구조체와 같은 방법으로는 호출할 수 없다. 클래스는 정의 과정에서 각각의 변수 및 함수의 접근 허용범위를 별도로 선언해야 한다.
  • C++의 접근제어 지시자는 세가지가 존재한다.
    • public: 어디서든 접근허용
    • protected: 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용
    • private: 클래스 내에서만 접근허용
#include <iostream>
#include <cstring>

using namespace std;

namespace STUDENT_CONST
{
    enum
    {
        NAME_LEN = 9
    };
}

class Student
{
private:
    char studentName[STUDENT_CONST::NAME_LEN];
    int studentNum;
    int studentLevel;

public:
    void InitMembers(char *Name, int ID, int Level);
    void ShowStudentInfo();
    void Pronunciation();
};

void Student::InitMembers(char *Name, int ID, int Level)
{
    strcpy(studentName, Name);
    studentNum = ID;
    studentLevel = Level;
}

void Student::ShowStudentInfo()
{
    cout << "Student Name: " << studentName << endl;
    cout << "Student Number: " << studentNum << endl;
    cout << "Student Level: " << studentLevel << endl;
}

void Student::Pronunciation()
{
    if (studentLevel > 4)
        return;
    else
        studentLevel++;
}

int main(void)
{
    Student zelda;
    zelda.InitMembers("Zelda", 19860221, 0);
    zelda.ShowStudentInfo();
    zelda.ShowStudentInfo();
    zelda.ShowStudentInfo();
    return 0;
}
  • 클래스의 용어는 다음과 같다.
    • 객체: 클래스로 선언된 변수
    • 멤버변수: 클래스 내에 선언된, 클래스를 구성하는 변수
    • 멤버함수: 클래스 내에 정의된, 클래스를 구성하는 함수
  • C++에서의 파일분할
    • 헤더파일: 표준 라이브러리 함수가 선언되어 있는 파일 
// File: tmp.h
#ifndef _TMP_H	// 헤더파일의 중복포함 방지를 위해서 사용하는 매크로
#define _TMP_H	// 헤더파일의 중복포함 방지를 위해서 사용하는 매크로

// 함수의 형을 선언하여 호출 시, 인수의 형태를 알린다.
// 형을 알리는 C/C++코드에는
// #define / enum / struct 헤더 부 / 클래스 선언 부 / 함수 형
// 등이 대표적이다.

int add(int a, int b);

#endif			// 헤더파일의 중복포함 방지를 위해서 사용하는 매크로
  • extern: 외부변수, C언어에서 외부에 존재하는 변수를 사용하게 해주는 키워드
// add.c

int x = 100;
int y = 1000;
// main.c

extern int a;
extern int b;

int main(void)
{
	printf(" a: %d, b: %d\n",a,b);
    
    return 0;
}
  • 링커: 하나 이상의 목적 파일을 가져와, 이를 단일 실행 프로그램으로 병합해주는 프로그램이다.
  • 보통 어떠한 클래스에 대해, 클래스의 헤더파일과 클래스의 코드파일이 나뉘어 지면, 헤더파일의 경우 클래스의 선언을 담고, 코드파일의 경우 클래스의 정의(멤버함수의 정의)를 담는다.
// Stu.h
#ifndef __STU_H__
#define __STU_H__

namespace STUDENT_CONST
{
    enum
    {
        NAME_LEN = 9
    };
}

class Student
{
private:
    char studentName[STUDENT_CONST::NAME_LEN];
    int studentNum;
    int studentLevel;

public:
    void InitMembers(char *Name, int ID, int Level);
    void ShowStudentInfo();
    void Pronunciation();
};

#endif
// stu.cpp
#include <iostream>
#include <cstring>
#include "Stu.h"
using namespace std;

void Student::InitMembers(char *Name, int ID, int Level)
{
    strcpy(studentName, Name);
    studentNum = ID;
    studentLevel = Level;
}

void Student::ShowStudentInfo()
{
    cout << "Student Name: " << studentName << endl;
    cout << "Student Number: " << studentNum << endl;
    cout << "Student Level: " << studentLevel << endl;
}

void Student::Pronunciation()
{
    if (studentLevel > 4)
        return;
    else
        studentLevel++;
}
#include "Stu.h"

int main(void)
{
    Student zelda;
    zelda.InitMembers("Zelda", 19860221, 0);
    zelda.ShowStudentInfo();
    zelda.ShowStudentInfo();
    zelda.ShowStudentInfo();
    return 0;
}
  • 이때, 만일 인라인 함수를 사용하게 된다면, 인라인 함수는 헤더파일에 함께 넣어야 한다.
  • 이렇게 파일을 분리하는 과정은 필수적이므로, 숙지해 둘 필요가 있다.

'Study > C++' 카테고리의 다른 글

[C++] OOP; Object-Oriented Programming  (0) 2023.10.06
[C++] Structure  (0) 2023.10.06
[C++] Call by value / Call by reference  (0) 2023.10.06
[C++] Const  (0) 2023.10.06
[C++] Difference of C & C++  (0) 2023.10.06