C++에서 클래스(Class)란 객체(Object)를 정의하는 틀.
클래스에 멤버 변수와 멤버 함수를 선언한다.
흔히들 붕어빵 틀이 클래스, 붕어빵이 객체라고 비유한다.
1. 선언 및 형태
class Myclass { // 참고로 클래스명은 대문자로 시작하는 것이 국룰.
public : // 접근지정자 public
int a = 10; // 초기값을 넣어줄수도 있다.(2011년 C++ 표준)
double b;
char c;
void getArea(void); // 함수선언이 가능
};
- 클래스는 class 키워드를 이용한다. C언어의 구조체(struct)를 선언하듯이 선언 마지막에 반드시 세미콜론을 추가한다.
// C언어 구조체
struct Mystruct { // 구조체 이름
int member; // 구조체 멤버 1
char number[10]; // 구조체 멤버2
unsigned short age; // 구조체 멤버3
};
- 2011년 C++ 표준 부터는 멤버 변수를 선언과 동시에 초기화가 가능하다.
2. 객체의 멤버 접근
- 클래스를 만들었다면 실제 적용 시 객체를 생성한다.
#include <iostream>
// 예시 원(Circle) 계산 클래스
class Circle {
public:
int radius;
double getArea();
};
// 함수 구현부
double Circle::getArea() {
return 3.14*radius*radius;
}
// Circle 클래스 적용
using namespace std;
int main(void) {
Circle donut; // 도넛이라는 객체를 만든다.
donut.radius = 1; // 도넛 객체의 반지름을 1로 설정
double area = donut.getArea(); // 도넛의 면적을 알아내기
cout << "donut 면적은 " << area << endl;
return 0;
}
- 만든 클래스명과 사용할 객체명을 선언하여 객체를 만든다.
- 객체 멤버에 접근하기 위해서는 [객체이름.멤버]의 형태로 사용한다.
- 간접멤버접근연산자 " -> " 도 있는데 포인터멤버일때 사용한다. (다음에 더 자세히 공부)
- 멤버 함수 구현부에서 "::"연산자는 네임스페이스인데 "이름공간"보다는 "소속" 정도로 해석하는 것이 좋다.
3. 생성자(constructor)
/*생성자(constructor)*/
// 생성자의 목적은 객체가 생성될 때 초기 작업을 위함이다.
// 생성자 함수는 오직 한번만 실행된다
// 생성자 함수의 이름은 클래스 이름과 동일하게 작성되어야만 한다.
// 생성자 함수의 원형에 리턴타입을 선언하지 않는다.
// 생성자는 중복가능하다.
#include <iostream>
using namespace std;
class Circle {
public :
int radius;
Circle();
Circle(int r);
double getArea();
};
Circle::Circle(){
radius = 1;
cout << "반지름" << radius << "원 생성" << endl;
// return 값이 있으면 안됨
}
Circle::Circle(int r){
radius = r;
cout << "반지름" << radius << " 원 생성" << endl;
}
double Circle::getArea() {
return 3.14*radius*radius;
}
int main(void) {
Circle donut; // 매개변수 없는 생성자 호출
donut.radius = 1; // 도넛 객체의 반지름을 1로 설정
double area = donut.getArea(); // 도넛의 면적을 알아내기
cout << "donut 면적은 " << area << endl;
Circle pizza(5); // 매개변수 있는 생성자를 호출. 30이 radius 멤버 변수로 전달되어 설정됨
area = pizza.getArea();
cout << "pizza 면적은 " << area << endl;
return 0;
}
// 위임생성자
Circle::Circle() : Circle(1) // Circle(int r)의 생성자 호출
// 객체의 초기화를 담당하는 타겟생성자
Circle::Circle(int r){
radius = r;
cout << "반지름" << radius << " 원 생성" << endl;
}
- 객체의 초기화 작업이 코딩된 Circle(int r)를 타겟 생성자라고 부르고, Circle() 생성자는 객체의 초기화를 다른 생성자에게 위임한다고 하여 위임생성자(delegating constructor)라고 부른다.
'Embedded System > 소프트웨어 (C,C++)' 카테고리의 다른 글
[C++] 함수 오버로딩 (Function Overloading) (0) | 2024.06.20 |
---|---|
[F/W] CPU 구조 및 동작 (1) | 2024.06.18 |
[F/W] 메모리 영역 (스택, 힙) (0) | 2023.08.24 |
[F/W] 펌웨어와 부트로더(BootLoader) (0) | 2023.08.23 |
[C/C++] Call By Value, Call by address (0) | 2023.08.07 |