C++ 학습: 구조체와 클래스
C++에서 구조체와 클래스는 데이터를 구조화하고 객체 지향 프로그래밍을 실현하는 기본 단위입니다. 이번 글에서는 구조체 정의와 사용, 클래스와 객체, 접근 지정자, 생성자와 소멸자, 그리고 this 포인터에 대해 알아보겠습니다.
1. 구조체 정의와 사용: C++ 구조체
구조체는 여러 변수를 하나의 단위로 묶어주는 데이터 구조입니다. C++에서는 구조체를 사용하여 관련 데이터를 그룹화할 수 있습니다.
구조체 정의와 사용 예제
using namespace std;
// 구조체 정의
struct Person {
string name;
int age;
float height;
};
int main() {
// 구조체 변수 선언 및 초기화
Person person1;
person1.name = "Alice";
person1.age = 30;
person1.height = 165.5;
// 구조체 멤버 접근 및 출력
cout << "Name: " << person1.name << endl;
cout << "Age: " << person1.age << endl;
cout << "Height: " << person1.height << endl;
return 0;
}
위의 예제에서 Person 구조체는 이름, 나이, 키를 포함하는 멤버를 가집니다. person1이라는 구조체 변수를 선언하고 각 멤버에 값을 할당한 후 출력합니다.
2. 클래스와 객체: 클래스 정의, 객체 생성 및 사용
클래스는 구조체와 유사하지만, 객체 지향 프로그래밍의 핵심 요소로, 데이터와 함수를 포함할 수 있습니다. 객체는 클래스의 인스턴스입니다.
클래스 정의와 사용 예제
using namespace std;
// 클래스 정의
class Car {
public:
string brand;
string model;
int year;
void displayInfo() {
cout << "Brand: " << brand << endl;
cout << "Model: " << model << endl;
cout << "Year: " << year << endl;
}
};
int main() {
// 객체 생성 및 초기화
Car car1;
car1.brand = "Toyota";
car1.model = "Corolla";
car1.year = 2020;
// 멤버 함수 호출
car1.displayInfo();
return 0;
}
위의 예제에서 Car 클래스는 브랜드, 모델, 연도를 포함하는 멤버 변수를 가지며, displayInfo라는 멤버 함수를 포함합니다. car1 객체를 생성하고 초기화한 후, 멤버 함수를 호출하여 정보를 출력합니다.
3. 접근 지정자: public, private, protected
클래스 멤버에 대한 접근 권한을 제어하기 위해 접근 지정자를 사용합니다. C++에서는 public, private, protected 접근 지정자가 있습니다.
- public : 모든 코드에서 접근할 수 있습니다.
- private : 클래스 내부에서만 접근할 수 있습니다.
- protected : 클래스 내부와 파생 클래스에서만 접근할 수 있습니다.
접근 지정자 사용 예제
using namespace std;
class Student {
private:
string name;
int age;
public:
void setName(string n) {
name = n;
}
string getName() {
return name;
}
void setAge(int a) {
if (a > 0) {
age = a;
}
}
int getAge() {
return age;
}
};
int main() {
Student student1;
student1.setName("Bob");
student1.setAge(20);
cout << "Name: " << student1.getName() << endl;
cout << "Age: " << student1.getAge() << endl;
return 0;
}
위의 예제에서 Student 클래스는 이름과 나이를 private 멤버로 선언하고, 이를 설정하고 가져오는 public 멤버 함수를 제공합니다.
4. 생성자와 소멸자: 객체 생성과 소멸 시점에 호출되는 함수
생성자는 객체가 생성될 때 호출되며, 객체의 초기화를 담당합니다. 소멸자는 객체가 소멸될 때 호출되며, 자원을 해제합니다.
생성자와 소멸자 사용 예제
using namespace std;
class Book {
public:
string title;
string author;
// 생성자
Book(string t, string a) {
title = t;
author = a;
cout << "Book created: " << title << " by " << author << endl;
}
// 소멸자
~Book() {
cout << "Book destroyed: " << title << " by " << author << endl;
}
};
int main() {
// 객체 생성
Book book1("1984", "George Orwell");
Book book2("Brave New World", "Aldous Huxley");
return 0;
}
위의 예제에서 Book 클래스는 생성자와 소멸자를 정의합니다. 객체가 생성될 때 생성자가 호출되어 책의 제목과 저자를 초기화하고, 객체가 소멸될 때 소멸자가 호출되어 메시지를 출력합니다.
5. this 포인터: 객체 자신을 가리키는 포인터
this 포인터는 객체 자신을 가리키는 포인터로, 클래스의 멤버 함수 내에서 사용됩니다. 이를 통해 객체의 멤버 변수와 함수를 참조할 수 있습니다.
this 포인터 사용 예제
using namespace std;
class Rectangle {
private:
int width;
int height;
public:
Rectangle(int w, int h) {
this->width = w;
this->height = h;
}
int area() {
return this->width * this->height;
}
void display() {
cout << "Width: " << this->width << ", Height: " << this->height << ", Area: " << this->area() << endl;
}
};
int main() {
Rectangle rect(10, 5);
rect.display();
return 0;
}
위의 예제에서 Rectangle 클래스는 this 포인터를 사용하여 멤버 변수와 함수를 참조합니다. 이를 통해 객체 자신을 가리키는 포인터를 명확하게 나타낼 수 있습니다.
이번 글에서는 C++의 구조체와 클래스에 대해 알아보았습니다. 구조체 정의와 사용, 클래스와 객체, 접근 지정자, 생성자와 소멸자, 그리고 this 포인터를 이해하면 객체 지향 프로그래밍의 기초를 다질 수 있습니다. 다음 단계에서는 상속과 다형성 등 고급 객체 지향 개념을 학습해보세요. Happy Coding!
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 8. C++의 "표준 템플릿 라이브러리 (STL)" (0) | 2024.06.17 |
---|---|
[C++] 7. C++의 "객체 지향 프로그래밍" (0) | 2024.06.17 |
[C++] 5. C++의 "포인터와 참조" (0) | 2024.06.14 |
[C++] 4. C++의 "배열과 문자열" (0) | 2024.06.14 |
[C++] 3. C++의 "함수" (0) | 2024.06.14 |