언어는 과-학인가요?/C++

멤버 이니셜라이저 (Member initializer) 초기화

이원자 탄소 2020. 11. 21. 11:47
728x90

멤버 이니셜라이저 (Member initializer)

: 만듦과 동시에 초기화

#include <iostream>

using namespace std;

class AAA {
private:
	int num;
public:

	AAA(int a) :num(10) {} //:=초기화

	void show_num() {
		cout << "num 변수값= " << num << endl;
	}
};

int main() {
	AAA aaa(10);
	aaa.show_num();

	return 0;
}

초기화 하고 잘 들어감

 

생성자 대입 

#include <iostream>

using namespace std;

class AAA {
private:
	int num;
public:
	
	AAA(int a) {
		num = a;
	}

	void show_num() {
		cout << "num 변수값= " << num << endl;
	}
};

int main() {
	AAA aaa(30);
	aaa.show_num();

	return 0;
}

 

const 맴버일때 initialize

#include <iostream>

using namespace std;

class AAA {
private:
	const int num;
	//클래스내의 멤버 변수에 const는 고정되어있음
	//새로운 값을 생성자 함수로 대입할 수 없다
	//이미 객체가 생성되었을때 쓰레기값으로 초기화되어있음

public:

	AAA(int a) :num(a) {} //:=초기화

	void show_num() {
		cout << "num 변수값= " << num << endl;
	}
};

int main() {
	AAA aaa(30);
	aaa.show_num();

	return 0;
}

생성 필요없이 바로초기화 

 

초기화 안하면 일어나는일 

#include <iostream>

using namespace std;

class Time {
public:
	int h;
	int m;
	int s;

	Time() {
		h = 0;
		m = 0;
		s = 0;
	}

	Time(int _h) {
		h = _h;
	}

	Time(int _h, int _m) {
		h = _h;
		m = _m;
	}

	Time(int _h, int _m, int _s) {
		h = _h;
		m = _m;
		s = _s;
	}

	void showTime() {
		cout << h << "hour:" << m << "minute:" << s << "seconds" << endl;
	}


};

int main() {
	//생성자 함수 내에서 시:분:초 값 0으로 대입
	Time t1;
	t1.showTime();

	//시간만 입력 >생성자 함수
	Time t2(3);
	t2.showTime();

	//시, 분만 입력> 생성자함수
	Time t3(5, 16);
	t3.showTime();

	//시,분,초만 입력 >생성자함수
	Time t4(1, 30, 40);
	t4.showTime();

}

쓰레기값이 들어감

#include <iostream>

using namespace std;

class Time {
public:
	int h;
	int m;
	int s;

	/*Time() {
		h = 0;
		m = 0;
		s = 0;
	}*/

	Time() :h(0), m(0), s(0) {}//초기화 하는걸 넣어줌

	Time(int _h) : Time()
	{
		h = _h;
	}

	Time(int _h, int _m) : Time(_h)
	{
		m = _m;
	}

	Time(int _h, int _m, int _s) : Time(_h,_m)
	{
		s = _s;
	}

	void showTime() {
		cout << h << "hour:" << m << "minute:" << s << "seconds" << endl;
	}


};

int main() {
	//생성자 함수 내에서 시:분:초 값 0으로 대입
	Time t1;
	t1.showTime();

	//시간만 입력 >생성자 함수
	Time t2(3);
	t2.showTime();

	//시, 분만 입력> 생성자함수
	Time t3(5, 16);
	t3.showTime();

	//시,분,초만 입력 >생성자함수
	Time t4(1, 30, 40);
	t4.showTime();

}

초기화를 해봄

 

초기화의 중요성

#include <iostream>

using namespace std;

class Time {
public:
	int h;
	int m;
	int s;

	Time(int _h, int _m, int _s) {
		this->h = _h; //this: 상속개념
		this->m = _m;
		this->s = _s;
	}
	//Time(int _h,int _m, int _s):h(_h),m(_m),s(_s){} 로도 표현가능

	void showTime() {
		cout << h << "hour:" << m << "minute:" << s << "seconds" << endl;
	}
};

	class TimeTwo : public Time {
		public:
			TimeTwo(int _h, int _m, int _s) :Time(h, m, s) {}
	};

	

int main() {
	Time t1(3, 3, 3);
	t1.showTime();
	TimeTwo tt1(5, 40, 20);
	tt1.showTime();

}

이러면 ㅅㅅ2에 쓰레기값 들어감

#include <iostream>

using namespace std;

class Time {
public:
	int h;
	int m;
	int s;

	Time(int _h, int _m, int _s) {
		this->h = _h; //this: 상속개념
		this->m = _m;
		this->s = _s;
	}
	//Time(int _h,int _m, int _s):h(_h),m(_m),s(_s){} 로도 표현가능

	void showTime() {
		cout << h << "hour:" << m << "minute:" << s << "seconds" << endl;
	}
};

	class TimeTwo : public Time {
		public:
			TimeTwo(int _h, int _m, int _s) :Time(8, 8, 8) {}
	};

	

int main() {
	Time t1(3, 3, 3);
	t1.showTime();
	TimeTwo tt1(5, 40, 20);
	tt1.showTime();

}

그래서 직접 넣어줘보자

잘 들어감

728x90