글로 배운 것과 직접 구르는게 다르다고 하지만.. 이건 너무하다. 글로 배울때도 어찌저찌 검색하면서 겨우겨우 이해하면서 넘어갔는데 실제로 마주하고 코드를 치려고 하니까 구조도 생각이 안나서 너무 당황스러웠다. 레전드로 어려움

이건 내가 처음구현할때 일단 구현만 해보자 해서 만든 것 이였다.

반복문을 그냥 반복만 해주는 기계라고 생각해버렸던 탓에 반복문으로 값을 증가시킨다는 생각을 미쳐 못했다. 더 최적화 하는 방법이 있었다


append("World")는 문자열 뒤에 추가해주고
insert(5, " World")는 5번째 문자 뒤인 6번째 문자부터 World를 추가해주는것임
A. 부모의 변수가 private에 있다면 자식 클래스도 값을 수정 할 수 없음. 따라서 부모의 변수를 초기화할 수 있는 유일한 통로인 '부모의 생성자'를 빌려 써야함.
그 뒤에 또 많은 이유가 있는데 모르면 외워


(변수명) : (자료형)
빨간색 네모 gcd는 privated에 넣어 달라는거임.
또 헷갈린게 두개가 있는데
Fraction() <<< 얘가 생성자임
1. 클래스의 객체 생성 시에 private 멤버를 자동으로 초기화한다.
2. 객체 생성시에 딱 한번 호출된다.
근데 설계도에는 Fraction(), Fraction(int num, int denom)이 두개가 있음
그건 바로 매개변수를 입력받지 않은 생성자는 Fraction()으로, 매개변수를 입력 받았으면 Fraction(int num, int denom)으로 가라는거임.
클래스(int num, int denom) : numerator(num), denominator(denom) {}
일때 : 뒤에가 초기화 리스트임. 즉, 메모리에 객체가 올라갈 때 privated에 있는 변수를 계속 초기화 해준다. 이걸 하지 않으면 상속된 파생 클래스가 호출될때 부모 클래스에 계속 쓰레기 값이 들어가서 방치 될 수 있어, 안전 장치이다.
결국에는 클래스가 변수를 내 마음대로 받기 위한 사기적인 자료형 이라는 느낌을 받았다.
일반 자료형 : int a = 10;
클래스 객체 : Fraction f(1, 2);
fraction f(1,2);였으니까 f.simplify();에는 (1,2)의 값을 fraction에 있는 simplify();라는 함수에 넣어라 라는거다.
Fraction Battery() const {} 이런 메소드(멤버 함수)가 나와서 좀 당황했는데 멤버 변수를 수정하지 않고 값만 리턴 해 주는 "읽기 전용" 함수를 이렇게 표현함