부모 클래스에 가상 함수를 body가 없는 상태로 선언만 해놓은 형태를 pure virtual function이라 한다. pure virtual function이 단 하나라도 있으면, 추상 클래스가 되기 때문에, 당연히 객체를 생성할 수 없다. 이럴 경우, 의미 자체가 자식 클래스들에서 해당 함수를 구현한다는 의미. 자식 클래스에서 해당 virtual 함수를 구현하지 않았기에, 자식 클래스의 객체를 만들 수 없다. 자식 클래스에서 해당 함수를 구현하니, 정상적으로 작동. pure virtual function을 선언하는 이유는 간단하다. 자식들이 해당함수를 구현해 각자에 맞게 사용할 수 있게 하기 위함. 이러한 pure virtual function들로만 이루어진 부모 클래스를 '인터페이스 클래스'라 부..
https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 사고과정 1.) 1. 해당 입력을 int형으로 받을 것인지, string으로 받을 것인지 고민. 2. 첫번 째 풀이는 int형으로 해봄. 3. 우선 해당 정수의 자릿수가 필요하고, 4. 배열에 수들을 하나씩 넣어주고 5. 내림차순 sort 함수 사용. 2-1). 두 번째 string형으로 해봄. 2-2). 마찬가지로 바로 sort함수 사용하면됨. 메모리 크기는 비슷하다. #include #include using namespace std; bool Decend(int x, int y..
1장) 각자의 클래스에 speak()함수를 구현했기에, 각자에 맞게 호출되는 모습이다. 하지만, 상속이라는 개념을 사용하는 것 자체가 편리하기 때문에 사용하는 것일텐데. Animal* ptr_animal1 = &cat;을 한다면, 자료형 자체는 Animal*이기 때문에, Animal클래스로 해석해버려서 ???가 나온다. 우리가 원하는 방향이 아닌데, 이럴 땐 어떻게 해야하나. 해결책은 부모와 자식의 클래스가 같은 경우, 오버라이딩을 하고 싶은 함수에 virtual을 부모클래스 있는 곳에 선언해주면 된다. 2장) 자료형이 A이기 때문에, "A"가 출력된다. 우리가 원하는 건, B가 프린트되는 것이기에, A의 함수에 virtual을 선언함으로써, B의 print()함수가 나올 수 있게 되었다. 여기서 신기하..
https://blog.naver.com/sss9073/222145800980 Chapter 11-5. 상속과 접근 지정자 * 블로그에 따라배우는 C++ 관련 모든 코드와 사진들의 저작권은 강의의 저자이신 홍정모 교수님께 있습니... blog.naver.com 네이버 블로그의 내 글을 참고하면서 복습해보자.
Patient 클래스는 Doctor의 클래스를 순서상 알지 못한다. 그렇기에 전방 선언을 해줌으로써, Doctor 클래스가 있음을 알려주긴 했다. 하지만 그럼에도, Doctor 클래스 안의 멤버나 메소드들은 알지 못하기에, 27번 줄에서 오류가 난다. Doctor들의 m_name이 있는지 모르기 때문. 그렇다면 해결책은 ? Doctor클래스가 필요한 함수를 Doctor 클래스 선언 이후에 놓는 것이다. 그러면 그제서야 아 Doctor클래스에 저런 것들이 있지 하면서 활용할 수 있겠지. 물론 기존에는 프로토타입만 선언해놓고.(void meetDoctors();) #include #include #include using namespace std; class Doctor;// forward declarati..
https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net sort 정렬을 활용하면 된다. 여기서 sort에 주는 함수 인자를 길이를 비교하는 것을 추가해주면 된다. #include #include #include using namespace std; bool comp(string s1, string s2) { if (s1.length() == s2.length()) return s1 < s2; else return s1.length() < s..
https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 해당 값들을 배열로 받아서, 가장 큰 값과 가장 작은 값을 곱하면 된다. #include #include using namespace std; int main() { int N = 0; cin >> N; int* arr = new int[N]; for (int i = 0; i > arr[i]; int small = *min_element(arr, arr + N);..