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 |