Language/C++

[C++] 클래스(Class)

0so0 2023. 9. 17. 07:00
728x90
반응형
SMALL

C언어에서의 구조체

SMALL
사용자가 여러 데이터(멤버 변수)를 가지고 새롭게 정의할 수 있는 사용자 정의 타입 
struct Person {
  char* name;
  int   age;
}; 

void PrintPerson(struct Person p) {
  printf(“%s, %d\n”, p.name, p.age);
}

void main() {
  struct Person jane, john; 
  
  jane.name = “Jane Smith”;
  jane.age  = 20;
  PrintPerson(jane);

  john.name = “John Smith”;
  john.age  = 15;
  PrintPerson(john);
}

 

C++에서의 클래스

사용자가 여러 데이터(멤버 변수), 데이터를 조작하는 방법(멤버 함수, 매소드)를 가지고 새롭게 정의할 수 있는 사용자 정의 형식
class Person {
 public:
  char* name;
  int   age;

  void Print() {
    printf(“%s, %d\n”, name, age);
  }
}; 

void main() {
  Person jane, john; 

  jane.name = “Jane Smith”;
  jane.age  = 20;
  jane.Print();

  john.name = “John Smith”;
  john.age  = 10;
  john.Print();
}

구조체와 클래스 비교

항목 C언어 구조체 C++ 구조체 C++ 클래스
멤버 변수 O O O
멤버 함수 X O O
접근 지정자 X O (기본값 public) O (기본값 private)
생성자 X O O
소멸자 X O O
상속 X O O
템플릿 X O O

접근지정자(Access specifiers)

클래스 멤버에 대한 접근 권한 지정
지정자 클래스 내부 파생 클래스 외부
private O X X
protected O O X
public O O O
class Test {
 private:
  int i;
  double d;

 protected:
  char c;

 public:
  short s;
  void func1() {};
};

void main() {
  Test t;

  t.i = 10;    // 오류
  t.d = 3.14;  // 오류

  t.c = ‘A’;   // 오류

  t.s = 8000;  // 가능, 대입됨
  t.func1();   // 가능, 호출됨

}

생성자(Constructor)

객체가 생성될 때 호출되는 함수(클래스 이름과 동일한 멤버함수)
사용자가 정의하지 않은 경우 컴파일러가 인수 없는 기본 생성자 정의

생성자 호출 시점

class Person {
 private:
  char* name_;
  int   age_;

 public:
  Person() {
    name_ = “noname”;
    age_  = 0;
  }

  void Print() {
    printf(“%s, %d\n”, name_, age_);
  }
};

- 일반적인 객체 생성(stack에 메모리 할당)

void main() {
  Person jane;  // 생성자 호출 
  // jane.name_는 “noname”, jane.age_는 0으로 초기화
  jane.Print();
}

- new 연산자 사용(heap에 메모리 할당)

void main() {
  // new 연산자로 생성하는 경우, -> 연산자 사용
  Person *jane = new Person();
  jane->Print();
}

생성자 오버로딩

인수 목록이 다른 생성자 정의
class Person {
 private:
  char* name_;
  int   age_;

 public:
  Person() {
    name_ = “noname”;
    age_  = 0;
  }

  Person(char* name, int age) {
    name_ = name;
    age_  = age;
  }

  // ...
};

소멸자(Destructor)

객체가 소멸될 때 호출되는 함수
클래스 이름 앞에 ~기호를 붙여서 사용
객체가 소멸될때 반드시 호출 되므로 메모리 leak 위험 방지
class Person {
 private:
  char* name_;
  int   age_;

 public:
  Person(char* name, int age) : 
    name_(name), age_(age) {

  ~Person() {
  }
};
728x90
반응형
LIST

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

[C++] 스마트 포인터  (0) 2023.09.25
[C++] OOP 특징  (0) 2023.09.18
[C++] 띄어쓰기 포함 문자열 입력  (0) 2023.09.12
[C++] STL String 사용법 및 예제  (0) 2023.08.15
[C++] 연산자 오버로딩(Operator Overloading)  (0) 2023.07.17