티스토리 뷰

문제

1. Examine the following class definition:
class DateType
{
public:
void Initialize(int, int, int);
int YearIs() const; // returns year
int MonthIs() const;// returns month
int DayIs() const; // returns day
private:
int year;
int month;
int day;
};
Which of the following statements in a client program correctly prints out
the year of the variable day1 of type DateType?
a. cout << day1.YearIs; b. cout << YearIs(day1);
c. cout << YearIs.day1; d. cout << day1.YearIs()
e. The year cannot be printed by a client program.

2. 다음 데이터를 적당하게 모델링할 수 있도록 C++로 정의하세요. (여러가
지 방법이 있으므로 여러 개의 답을 써도 됨)
a. information about a single product in an inventory-control program
b. a list of famous quotations
c. an electronic address book (name, address, phone, e-mail….)
d. 바둑판
e. 지난 10년간 서울시내 주요 교차로 20곳의 월별 교통사고 사망률
3. struct와 class의 차이점은?
4. struct와 union의 차이점은?
5. Why is it good practice to put a class declaration in one file and the
implementation in another file?




제출 답
1. d
2.
 a.
class product
{
public:
 int getnumber()//재고의 갯수
 string date()//들어온 날짜
 string due()//유통기한
}

 b.
class qutation
{
public:
 void insert()//insert할 때에 알파벳 순서로 된 리스트에 들어가기 때문에 있어야할 자리에 insert가 되기 때문에 따로 정렬할 필요가 없다. 또한 배열 크기를 넘길 경우 더 큰 배열에 복사를 하여 따로 is_full이란 함수를 만들 필요가 없음
 void delete()//delete할 때에는 delete를 한 후에 그 뒤에 들어가있는 데이터들이 한칸씩앞으로 자리가 바뀌게 된다.
 int search(string)//몇번째에 나와있는지 알게 된다.
 void print(int)
}

 c.
class address_book
{
public:
 string get_name(int)//몇번째에 있는지 숫자를 알면 그에 해당하는 name을 얻을 수 있다.
 void set_name(string)//몇번째에 있는지 숫자를 알면 그에 해당하는 name을 바꿀 수 있다.
 string get_address(int)//몇번째에 있는지 숫자를 알면 그에 해당하는 address을 얻을 수 있다.
 void set_address(string)//몇번째에 있는지 숫자를 알면 그에 해당하는 address을 바꿀 수 있다.
 string get_phone(int)//몇번째에 있는지 숫자를 알면 그에 해당하는 phone을 얻을 수 있다.
 void set_phone(string)//몇번째에 있는지 숫자를 알면 그에 해당하는 phone을 바꿀 수 있다.
 string get_email(int)//몇번째에 있는지 숫자를 알면 그에 해당하는 email을 얻을 수 있다.
 void set_email(string)//몇번째에 있는지 숫자를 알면 그에 해당하는 email을 바꿀 수 있다.
 int search_name(string)//name을 통해 몇번째에 있는지 찾을 수 있다.
 int search_address(string)//address을 통해 몇번째에 있는지 찾을 수 있다.
 int search_phone(string)//phone을 통해 몇번째에 있는지 찾을 수 있다.
 int search_email(string)//email을 통해 몇번째에 있는지 찾을 수 있다.
 void print(int)//몇번째인지만 넘겨주면 그에 해당하는 정보가 다 출력됨

private:
 string name;
 string address;
 string phone;
 string email;
}

 d.
class badook
{
public:
 void set(int, int, int)//(x, y)좌표에 돌을 지정하기
 int get(int, int) const//흰돌일 시에 1, 검은돌일시에 2, 아무것도 없을 시에 0
}

 e.
class crossroad
{
public:
 void draw()//전체적으로 그래프를 그려주기
 void printyear(int)// 5년전의 사망률을 보고싶다면 5를 인자로 넘겨주면 5년전의 20곳의 교통사고 사망률이 프린트 된다.
 void printlist()//20곳의 리스트가 나온다. 1.서울시청교차로 2. 광화문교차로 .... 이런식으로 나오게 된다.
 void printcross(int)//서울시청교차로의 10년간 사망률을 보고 싶다면 1을 인자로 넘겨주면 서울시청교차로의 10년간 사망률이 프린트된다.
}

3.
공통점
새로운 데이터 타입을 생성
하나의 변수에 여러개의 값을 저장

다른점
구조체
선언과 동시에 메모리가 생성
메서드를 포함 하지 못함
접근 지정의 개념이 없음(멤버 변수 모두 public)
상속 개념 없음

클래스
메서드 포함 가능
접근 지정 개념 적용
상속 개념 포함


구조체는 "값 형식"이고 클래스는 "참조 형식"입니다. 구조체 형식 변수는 클래스 형식처럼 데이터에 대한 참조를 포함하지 않고 구조체의 데이터를 포함합니다.
구조체는 스택 할당을 사용하고 클래스는 힙 할당을 사용합니다.
구조체 요소는 모두 기본적으로 Public이지만, 클래스의 경우 변수와 상수는 기본적으로 Private이고 다른 클래스 멤버는 기본적으로 Public입니다.


4.union은 struct와 비슷하게 여러개의 멤버변수로 구성된다
그러나 union은 struct와 다르게 한 순간에 하나의 멤버 변수만 사용할 수 있다.
만일 struct가 double, int, int형인 데이터를 가지고 있고 union이 double, int, int를 가지고 있을 떄에 struct는 메모리에서 data member을 위해 8+4+4=16byte를 가지지만
union은 8byte만을 잡는다. 따라서 한 순간에 하나의 멤버 변수만을 사용할 수 있는 것이다.
5.
declaration을 통해 헤더파일을 만들고 헤더파일에 된 함수들을 따로 implementation을 함으로써 다른 사람들이 이것이 어떻게 구현되었는지 알 수 없게하며 그럼에도 그 코드를 사용할 수 있게한다.
어떻게 구현되었는지 알게 되면 다른 사람들이 이 클래스를 사용하여 코드를 짤 때 구현된 것에 의존하여 짜기 때문에 미리 구현된 코드를 바꿀 당시에 다른 사람들이 짠 코드는 쉽게 망가질 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함