This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
class:os2014f:hw5 [2014/10/10 00:21] mhshin |
class:os2014f:hw5 [2025/10/13 12:45] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | Student 클래스를 다음과 같이 정의하여라. | + | 아래처럼 정의된 Person클래스를 정의하여라. |
| - | * Student 클래스는 다음과 같은 private 데이터를 저장할 수 있다. | + | |
| - | - 성 (last name), string type | + | * 클래스 이름: Person |
| - | - 이름 (first name), string type | + | * Data: |
| - | - 학년, integer type | + | * 나이 (integer) |
| - | - 수강과목 리스트, vector(string) type | + | * 이름 (string) |
| - | * Student 클래스는 다음과 같은 public 함수를 제공한다. | + | * 성별 (char), F=여성, M=남성 |
| - | - 생성자는 다음을 인자로 받는다. | + | * 학교이름 (string) |
| - | - 성(string), 이름(string) | + | * 좋아하는 것들 (vector<string>): 좋아하는것들의 리스트. 중복 불가 |
| - | - 이 생성자가 불리면 학년을 1로 초기화 한다. 수강과목은 없음. | + | * 싫어하는 것들 (vector<string>): 싫어하는것들의 리스트. 중복 불가 |
| - | - string get_name(): 성+빈칸+이름을 string으로 리턴한다. 예: Shin Minho | + | * 단, 같은 내용이 좋아하는 것과 싫어하는것에 중복되어 있을 수 없다 |
| - | - int get_year(): 학년을 리턴한다 | + | * Actions: |
| - | - void promote(): 학년을 하나 증가한다. 단, 현재 4학년이면 0으로 설정하고, 이미 0이면 증가하지 않는다. | + | * Constructors |
| - | - bool graduated(): 학년이 0이면 참을 리턴한다. 그 외는 거짓. | + | * Person(string name, char gender) |
| - | - void enroll(string classname): 주어진 이름의 수업을 수강한다. | + | * age=1로 초기화 |
| - | - vector<string> get_classes(): 수강과목 리스트를 리턴한다. | + | * gender가 'M'이나 'F'가 아니면 'F'로 설정 |
| - | * Student 클래스는 다음과 같은 main()함수를 실행했을 때 모두 패스해야 한다. | + | * 학교이름은 "NO SCHOOL" |
| + | * 좋아하는것, 싫어하는것은 빈 리스트 초기화 | ||
| + | * Getters | ||
| + | * string get_name() | ||
| + | * int get_age() | ||
| + | * char get_gender() | ||
| + | * string get_favorite(int i): i번째 좋아하는것 | ||
| + | * string get_dislike(int i): i번째 싫어하는것 | ||
| + | * int get_fav_cnt(): 좋아하는것의 갯수 | ||
| + | * int get_dis_cnt(): 싫어하는것의 갯수 | ||
| + | * Setters | ||
| + | * void set_name( string name ) | ||
| + | * void set_age( int age ) | ||
| + | * Checkers | ||
| + | * bool is_female(): 여자면 참, 아니면 거짓 | ||
| + | * bool is_schoolkid(): 나이가 7살 이상, 19살 이하면 참 | ||
| + | * Other functions | ||
| + | * void goto_school(string schoolname) | ||
| + | * 학교이름을 설정해준다. 단, 나이가 7살이상 19살 이하가 아니면 "NO SCHOOL"로 | ||
| + | * void add_favorite(string thing) | ||
| + | * thing을 좋아하는것들에 추가 (새로운 것만) | ||
| + | * 싫어하는 것들에 있으면 삭제 | ||
| + | * void add_dislike(string thing) | ||
| + | * thing을 싫어하는 것들에 추가 (새로운 것만) | ||
| + | * 좋아하는 것들에 있으면 삭제 | ||
| + | * Operator overloading | ||
| + | * operator++(prefix): 나이 1 증가 | ||
| + | * operator>: 나이를 비교 | ||
| + | |||
| + | 테스트 방법: 이번에는 테스트 코드를 제공하지 않습니다. 다만, 아래 항목들을 주의하세요. | ||
| + | * 이름과 성별, 나이가 제대로 저장되는지 | ||
| + | * 좋아하는 리스트에 중복된 것들이 없는지, 싫어하는 리스트에 중복된 것들이 없는지, 두 리스트간에 중복은 없는지 | ||
| + | * 테스트 코드는 차후에 공개예정. 지난번 제공한 check 매크로를 이용해서 자신만의 테스트를 하시기 바랍니다. | ||
| + | |||
| + | 제출할 것: cpphw5_<학번>.cpp | ||
| + | 내용: class Person 정의 (main함수 포함하지 말 것. 포함시키면 감점) | ||
| + | |||
| + | 채점: 채점에 사용된 테스트코드에 따라서 각 check 항목마다 1점~2점 감점됨. 2점 항목은 난이도가 있는 항목임. 점수 배분은 차후 공개. | ||
| - | <code> | ||
| - | #define check( s, a, b ) { \ | ||
| - | if( a != b ) { \ | ||
| - | cout << "## FAIL (" << s << "): " << a << " != " << b << endl; \ | ||
| - | exit(1); \ | ||
| - | } \ | ||
| - | cout << "## PASS (" << s << "): " << a << endl; \ | ||
| - | } | ||
| - | | ||
| - | int main() { | ||
| - | Student s1( "Kim", "Soochul" ); | ||
| - | check( s1.get_year(), 1 ); | ||
| - | check( s1.get_name(), "Kim Soochul" ); | ||
| - | s1.promote(); | ||
| - | check( s1.get_year(), 2 ); | ||
| - | check( s1.graduated(), false ); | ||
| - | s1.enroll( "C++" ); | ||
| - | s1.enroll( "Java" ); | ||
| - | vector<string> classes = s1.get_classes(); | ||
| - | check( classes[0], "C++" ); | ||
| - | check( classes[1], "Java" ); | ||
| - | s1.promote(); | ||
| - | s1.promote(); | ||
| - | s1.promote(); | ||
| - | check( s1.graduated(), true ); | ||
| - | } | ||
| - | </code> | ||
| - | |||