본문 바로가기
프로그래밍 언어/C++

[C++] default member initializer

by 까망 하르방 2025. 2. 2.
반응형

클래스 멤버 초기화

크게 대입 방식, 초기화 방식 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

 

[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

댓글