반응형
클래스 멤버 초기화
크게 대입 방식, 초기화 방식 2가지가 존재한다.
대입 방식
① string 타입의 디폴트 생성자 호출
② 대입 연산자 호출
초기화 방식
① 해당 인자에 맞는 생성자 호출하여 초기화
#include <iostream>
int g = 0;
class Harbang
{
std::string name;
int age;
public:
Harbang(const std::string& s, int a)
{
// 대입 방식
name = s;
age = a;
}
};
class Forest
{
std::string name;
int age;
public:
Forest(const std::string& s, int a)
: name{s}, age{a} {} // 초기화
};
Q) 어떤 방식이 좋을까?
간단한 원형 타입이라면 초기화 방식이 좋지만,
멤버 변수 값에 조건문 등이 필요하면 대입 방식을 선택한다.
default member initializer
C++11 부터 멤버 데이터 초기값을 지정할 수 있다.
#include <iostream>
int g = 0;
class Point
{
public:
int x{g++};
int y{5};
Point() {}
Point(int a) : x{a} {}
Point(int a, int b) : x{a}, y{b} {}
};
int main()
{
Point p1;
printf("%d %d\n", p1.x, p1.y); // 0 5
Point p2;
printf("%d %d\n", p2.x, p2.y); // 1 5
Point p3(0);
printf("%d %d\n", p3.x, p3.y); // 0 5
Point p4(0, 0);
printf("%d %d\n", p4.x, p4.y); // 0 0
}
컴파일러가 내부적으로 생성자를
아래 형태로 변경한다.
Point() : x{g++}, y{0} {}
Point(int a) : x{a}, y{0} {}
Point(int a, int b) : x{a}, y{b} {}
[C++] 클래스 Class
클래스 Class객체(object)를 만드는 틀"클래스 내부 변수/함수" = "멤버 데이터/함수" 라고 한다. 접근 권한• public 외부에서도 접근 허용• private 멤버 함수만 접근 가능 (default 접근 권한)• protecte
zoosso.tistory.com
📌 [C++] member initializer list
[C++] member initializer list
member initializer list 필요성• 멤버 데이터로 상수나 참조가 있는 경우• 디폴트 생성자가 없는 타입이 멤버로 있는 경우 [예제] member initializer list 사용하지 않은 경우상수와 참조 변수는 반드
zoosso.tistory.com
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] default 생성자 요청 (2) | 2025.02.05 |
---|---|
[C++] 복사 생성자 (Copy Constructor)란? (3) | 2025.02.04 |
[C++] 클래스 파일 분할 (4) | 2025.01.30 |
[C++] constexpr function (1) | 2025.01.29 |
[C++] member initializer list (1) | 2025.01.29 |
댓글