목록2024/05 (24)
Minwoo Dev.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eJ6cW2/btsHCB42VYo/lST383EZk3bjfCLJW0Lwwk/img.png)
추상 클래스(abstract class)추상 메서드(abstract method)가 포함된 클래스추상 메서드가 하나라도 포함되면, 그 클래스는 추상 클래스로 선언해야한다. 다중 상속이 불가능하다추상 메소드 외에 일반 메소드, 생성자, 필드를 가질 수 있다."상속 관계"에 초점이 맞춰져있다.객체를 생성할 수 없다.추상 클래스를 추상 클래스에 상속할수도 있다.import java.util.Stack;abstract class Animal{ // 추상 클래스 Animal public Animal(){} public void eat(){ System.out.println("I am eating now"); } abstract public void cry();}class Cat ..
전위 표기법(prefix)연산자가 피연산자의 앞에 오게되는 표기법을 의미한다.+32 예를 들어, 3+5*2라는 식을 전위 표기법으로 바꾼다면, 우선순위를 정하여 괄호를 친다.(3+(5*2)) -> 3+(*52) -> +3*52 위와 같은 순서로 전위식을 구해낼 수 있다. 중위 표기법(infix)우리가 보통 수식을 적을 때 사용하는 방법이다.3+2 중위 표기법은 사람이 보통 사용하는 방법이기에, 컴퓨터가 인식할 수 있도록 변환하여 사용하게 된다. 후위 표기법(postfix)연산자가 뒤쪽에 있고 피연산자가 앞쪽에 위치한 식을 의미한다.32+ 컴퓨터는 수식을 후위 표기법 방식으로 인식한다. 중위식인 3+5*2를 마찬가지로 후위식으로 변환한다면, 괄호를 사용하면 쉽다.3+5*2 -> (3+(5*2)) -..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cxJtWd/btsHDf79k2m/OD4CfZ7Vak7btk2yA6699k/img.png)
string문자열을 저장하기 위해서 char형 배열을 사용해야 했던 C언어와는 달리, C++에서는 문자열을 다룰 수 있는 string이 존재한다.변수형처럼 사용하지만, 실제로 string은 클래스(class)이다.#include using namespace std;int main(void){ string s = "안녕하세요."; cout 실행 결과 char* C언어에서 많이 사용되는 문자열 표현 방식.문자 하나를 저장할 수 있는 char을 여러 개 연결하여 배열처럼 사용한다.포인터 값이기 때문에 변수 안에는 문자열의 시작 주소가 담겨있다.#include using namespace std;int main(void){ char *s = "안녕하세요."; cout 실행 결과 v..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/M3Ni2/btsHvrBY35e/cebuYbwWZfJLfOXCNfFs0K/img.png)
문제 1예제 StablePointPtrArray.cpp의 65, 66행을 다음과 같이 구성할 수 있도록 Point 클래스를 대상으로 연산자 오버로딩을 진행해보자for (int i = 0; i 물론, 실행결과에는 변함이 없도록 연산자를 오버로딩 해야한다. 정답#include #include using namespace std;class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0) : xpos(x), ypos(y) {} friend ostream &operatorxpos ypos = arrlen) { cout = arrlen) { cout 결과 문..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/coq7bv/btsHvWVN3ww/ysgy5kZjzzyzKVwgmddJVk/img.png)
컬렉션이란 ? 요소(element)라고 불리는 가변 개수의 객체들의 저장소다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합요소로는 객체 타입만 가능!!! 컬렉션의 종류는 위 사진과 같다. 위 설명으로는 충분히 이해가 되지 않을 것이다.예를 들어, 연결리스트를 사용한다고 할 때, 우리는 연결리스트를 직접 구현하여 사용하게 된다.하지만 Java 에서는 LinkedList라는 컬렉션이 존재하기에 이것을 우리는 그냥 사용하면 된다. 이처럼 컬렉션은 자료구조와 이를 구현하는 클래스를 정의하는 인터페이스를 제공하게 된다. 제네릭이란 ?클래스에서 사용할 데이터 타입을 미리 지정하지 않고 외부에서 지정하도록 하는 기법 위 사진에서는 Person이라는 클래스를 제네릭을 사용하여..
문제 보통 자료구조 과목에서 중위 표기법의 소괄호 출력까지 신경을 쓰지는 않는다.순회 자체를 더 중요시하기 때문이다.하지만 이는 여러분이 궁금해 할 수 있는 부분이다.그래서 소괄호의 출력을 위한 힌트를 제시하고 문제의 해결을 돕기로 하겠다. 먼저 다음 세 중위 표기법을 보자. 3 + 2 * 73 + ( 2 * 7 )( 3 + ( 2 * 7 ) )셋 다 그 내용이 동일한 수식이다. 따라서 이를 수식 트리로 표현하면 그 결과는 당연히 같을 수밖에 없다. 같지 않다면 잘못된 것이다. 자! 그럼 생각해보자. 위 수식을 표현한 수식 트리 각각을 대상으로 다음과 같이 요청을 한다면,이 수식 트리에 담긴 수식을 중위 표기법의 수식으로 출력하여라!어떻게 출력이 이루어지겠는가 ? 첫 번째 수식을 대상으로 만들어진 수식 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kPDyp/btsHt5etK13/E1GauZuMhSb0Qp4l5SafV1/img.png)
문제 우리가 구현한 이진 트리에는 소멸관련 함수가 정의되어 있지 않다. 때문에 예제에서는 동적으로 할당된 노드를 소멸시키지는 않고 프로그램 종료하였다.따라서 이진트리를 완전히 소멸시키는 함수를 다음과 같이 선언하고 정의하고자 한다. void DeleteTree(BTreeNode * bt); 위 함수가 정의되면, 이는 다음과 같이 호출되어야한다. int main(void){ BTreeNode * bt1 = MakeBTreeNode(); . . . . DeleteTree(bt1); . . . .} 그리고 위와 같이 DeleteTree 함수가 호출되면, bt1 이 가리키는 노드를 루트 노드로 하는 트리 전부가 완전히 소멸되어 한다. 그럼 앞서 완성한 BinaryTree.h 와 BinaryTre..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PI2Cz/btsHrObDECX/hEvnPr13ReN6j0xX7yke1k/img.png)
문제 1Chapter 07에서는 예제 HASComposite.cpp를 통해서 다음의 두 클래스를 정의하였다.(완전한 클래스의 정의는 예제를 참고하자.) class Gun{ ...}class Police { private: int handcuffs; Gun * pistol; public: .... } 이에 Police 클래스를 대상으로 깊은 복사가 이뤄지도록 대입 연산자와 복사 생성자를 동시에 정의하고 이의 확인을 위한 main 함수도 적절히 정의해보자. 정답#include using namespace std;class Gun{private: int bullet;public: Gun(int bnum) : bullet(bnum) {} void Shot() ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LgA3I/btsHlF8RtQK/SdRu5h7kalpFq88dlkNmC0/img.png)
예제 PointConsoleOutput.cpp 에서 정의한 Point 클래스를 대상으로 아래의 main 함수가 보이는대로 데이터의 입력이 가능하도록, 그리고 실행의 예에서 보이는 대로 출력이 이루어지도록 >> 연산자를 오버로딩 하자. PointConsoleOutput.cpp#include using namespace std;class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0) : xpos(x), ypos(y) {} void ShowPosition() const { cout [main 함수]int main(void){ Point pos1; cout > pos1; cout > p..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cygoqO/btsHnKAH8w0/FhAwYfOJVVZRREBgLKtawk/img.png)
문제 1 : 멤버함수의 형태로 오버로딩부호 연산자로서 - 는 단항 연산자이다. 이 연산자는 피연산자의 부호를 반전시킨 결과를 반환한다.예를 들어서 다음 문장이 실행되면,int num2 = -num1; num2에는 num1과 절대값은 같지만 부호가 다른 값이 저장된다. 물론 num1의 값에는 영향을 미치지 않는다. 이와 유사하게 Point 클래스를 대상으로 - 연산자를 오버로딩해보자.다음의 문장이 실행되면,Point pos2 = -pos1; pos2의 멤버변수는 pos1의 멤버변수 값과 다른 부호의 값으로 초기화되도록 오버로딩해보자. 정답 소스코드#include using namespace std;class Point{private: int xpos, ypos;public: Point(int ..