|
9章
|
| #include class CUnivMem { // 大学人クラス char name[20]; // 氏名 public: void SetName(const char *n) {strcpy(name, n);} const char *ShowName() const {return name;} }; class CStudent: private CUnivMem { // 学生クラス int code; // 学籍番号 public: void SetCode(const int c) {code = c;} void SetStdName(const char *n){SetName(n);} int ShowCode() const {return code;} const char *ShowStdName() const { return ShowName();} }; |
| #include enum {mei = 1867, tai = 1911, sho = 1925, hei = 1988}; class CCalendar { ... }; int CCalendar::ShowWD() { int c, y, m, yr, w; if (ShowM() <= 2) { m = ShowM() + 12; yr = ShowY() - 1; } else { m = ShowM(); yr = ShowY(); } c = yr / 100; y = yr % 100; w = (int)(c / 4) - 2 * c + y + (int)(y / 4) + (int)(26 * (m + 1) / 10) + ShowD() - 1; w %= 7; if (w < 0) w += 7; return w; } class JCalendar: public CCalendar { public: JCalendar(int y, int m, int d): CCalendar(y, m, d) {} void print(); }; void JCalendar::print() { char *wname[7] = {"日", "月", "火", "水", "木", "金", "土"}; if (ShowY() > mei && ShowY() <= tai) cout << "明治" << ShowY() - mei; else if (ShowY() > tai && ShowY() <= sho) cout << "大正" << ShowY() - tai; else if (ShowY() > sho && ShowY() <= hei) cout << "昭和" << ShowY() - sho; else if (ShowY() > hei) cout << "平成" << ShowY() - hei; cout << "年" << ShowM() << "月" << ShowD() << "日" << '(' << wname[ShowWD()] << ")\n"; } class ECalendar: public CCalendar { public: ECalendar(int y, int m, int d): CCalendar(y, m, d) {} void print(); }; void ECalendar::print() { char *wname[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; char *mname[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; cout << wname[ShowWD()] << ' ' << mname[ShowM() - 1] << ' ' << ShowD() << ' ' << ShowY() << '\n'; } int main() { CCalendar c(1998,12,28); c.print(); JCalendar cj(1998,12,29); cj.print(); ECalendar ce(1998,12,30); ce.print(); } |
| #include #include class CUnivMem { // 大学人クラス protected: ... }; class CStudent: public CUnivMem { // 学生クラス int code; // 学籍番号 public: void SetCode(const int c) {code = c;} int ShowCode() const {return code;} void print() { cout << "Name: " << name << '\n'; // 限定公開メンバのアクセス cout << "Student code: " << code << '\n'; } void SetStdName(const char *n) {strcpy(name, n);} }; int main() { CStudent s; s.SetStdName("Taro"); // CUnivMem の継承メンバ関数 s.SetCode(1001); // CStudent のメンバ関数 s.print(); // Name: Taro // Student code: 1001 return 0; } |
| #include enum {mei = 1867, tai = 1911, sho = 1925, hei = 1988}; class CCalendar { int year, month, day; public: ... friend ostream &operator <<(ostream &, CCalendar); }; ostream &operator <<(ostream &s, CCalendar x) { s << x.year << "/" << x.month << "/" << x.day; return s; } class JCalendar: public CCalendar { public: ... friend ostream &operator <<(ostream &, JCalendar); }; ostream &operator <<(ostream &s, JCalendar x) { char *wname[7] = {"日", "月", "火", "水", "木", "金", "土"}; if (x.ShowY() > mei && x.ShowY() <= tai) s << "明治" << x.ShowY() - mei; else if (x.ShowY() > tai && x.ShowY() <= sho) s << "大正" << x.ShowY() - tai; else if (x.ShowY() > sho && x.ShowY() <= hei) s << "昭和" << x.ShowY() - sho; else if (x.ShowY() > hei) s << "平成" << x.ShowY() - hei; s << "年" << x.ShowM() << "月" << x.ShowD() << "日" << '(' << wname[x.ShowWD()] << ")"; return s; } class ECalendar: public CCalendar { public: ... friend ostream &operator <<(ostream &, ECalendar); }; ostream &operator <<(ostream &s, ECalendar x) { char *wname[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; char *mname[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; s << wname[x.ShowWD()] <<' ' << mname[x.ShowM() - 1] << ' ' << x.ShowD() << ' ' << x.ShowY(); return s; } |
| #include #include class CUnivMem { // 大学人クラス char name[20]; // 氏名 public: CUnivMem(char *n) {cout << "CUnivMem 作成中\n"; strcpy(name, n);} void SetName(const char *n) {strcpy(name, n);} char *ShowName() {return name;} void print() {cout << "Name: " << name << '\n';} }; class CStudent: public CUnivMem { // 学生クラス int code; // 学籍番号 public: CStudent(char *n, int c): CUnivMem(n) {cout << "CStudent 作成中\n"; code = c;} void SetCode(const int c) {code = c;} int ShowCode() {return code;} void print(); }; class CForeignStd: public CStudent { // 留学生クラス char name[10]; // 国名 public: CForeignStd(char *n, int c, char *cn): CStudent(n, c) {cout << "CForeignStd 作成中\n"; strcpy(name, cn);} void SetName(char *c) {strcpy(name, c);} char *ShowCoutry() {return name;} void print(); }; void CStudent::print() { CUnivMem::print(); // CUnivMem の print cout << "Student code: " << code << '\n'; // Student の code } void CForeignStd::print() { CStudent::print(); // CStudent の print cout << "Country: " << name << '\n'; // ForeignStd の code } int main() { CForeignStd f("John", 1032, "US"); f.print(); // Country: US return 0; } |
| class CUnivMem { /* 略 */ } // 大学人クラス class CStudent: public CUnivMem { /* 略 */ } // 学生クラス class CForeignStd: public CStudent { /* 略 */ } // 留学生クラス void printall(CUnivMem *p) {p->print(); // CUnivMem::print() を実行 int main() { CForeignStd f("John",1032,"US"); CStudent s("Taro",1000); printall(&f); // Country: US printall(&s); return 0; } |
| #include enum {mei = 1867, tai = 1911, sho = 1925, hei = 1988}; class CCalendar { int year, month, day; public: ... void virtual print() {cout << year << '/' << month << '/' << day << '\n';} }; int CCalendar::ShowWD() { ... } class JCalendar: public CCalendar { public: JCalendar(int y, int m, int d): CCalendar(y,m,d) {} void print(); }; void JCalendar::print() { ... } class ECalendar: public CCalendar { public: ECalendar(int y, int m, int d): CCalendar(y,m,d) {} void print(); }; void ECalendar::print() { ... } int main() { /* 本文参照 */ } |
| #include enum {mei = 1867, tai = 1911, sho = 1925, hei = 1988}; class CCalendar { ... void virtual print()=0; // 純粋仮想関数 }; int CCalendar::ShowWD() { ... } class JCalendar: public CCalendar { ... void print(); }; void JCalendar::print() { ... } class ECalendar: public CCalendar { ... void print(); }; void ECalendar::print() { ... } int main() { CCalendar *c JCalendar cj(1998,12,29); ECalendar ce(1998,12,30); c=&cj; c->print(); c=&ce; c->print(); } |
| #include #include class CUnivMem { // 大学人クラス char name[20]; // 氏名 public: CUnivMem(char *n) {cout << "CUnivMem 作成中\n"; strcpy(name, n);} ... }; class CStudent: public CUnivMem { // 学生クラス int code; // 学籍番号 public: CStudent(char *n, int c): CUnivMem(n) {cout << "CStudent 作成中\n"; code = c;} ... }; class CStuff: public CUnivMem { int code; // 教職員コード public: CStuff(char *n, int x): CUnivMem(n) {cout << "CStuff 作成中\n"; code = x;} ... }; class CTA: public CStuff, public CStudent { int code; // TA コード public: CTA(char *n, int std_c, int stf_c, int TA_c): CStuff(n, stf_c), CStudent(n, std_c) {cout << "CTA 作成中\n"; code = TA_c;} ... } }; int main() { CTA t("Jiro", 1003, 5046, 53); t.print(); return 0; } |
| #include enum {mei = 1867, tai = 1911, sho = 1925, hei = 1988}; class CCalendar { ... }; int CCalendar::ShowWD() { ... } class JCalendar: public CCalendar { char name[10]; // 国名 public: JCalendar(char* n, int y, int m, int d): CCalendar(y, m, d) { strcpy(name, n); } char* ShowName() {return name;} void print(); }; void JCalendar::print() { ... } class ECalendar: public CCalendar { int code; // 国コード public: ECalendar(int c, int y, int m, int d): CCalendar(y, m, d) {code = c;} int ShowCode() {return code;} void print(); }; void ECalendar::print() { ... } class EJCalendar: public ECalendar, public JCalendar { char name[10]; // 地域名 public: EJCalendar(char *n, char *nn, int c, int y, int m, int d): ECalendar(c, y, m, d), JCalendar(n, y, m, d) {strcpy(name, nn);} char* ShowName() {return name;} void print(); }; void EJCalendar::print() { ECalendar::print(); cout << "(area code: " << ECalendar::ShowCode() << ' ' << "国: " << JCalendar::ShowName() << ' ' << "地域: "<< name << ")\n"; } int main() { ECalendar ce(1, 1998, 12, 1); EJCalendar cej("JPN", "Tokyo", 10, 1998, 12, 30); ce.print(); cej.print(); } |
| #include #include class CUnivMem { char name[20]; // 氏名 public: CUnivMem(char *n) {cout << "CUnivMem 作成中\n"; strcpy(name, n);} ... }; class CStudent: public virtual CUnivMem { // CUnivMem を仮想基本クラスとして継承 int code; // 学籍コード public: CStudent(char *n, int c): CUnivMem(n) {cout << "CStudent 作成中\n"; code = c;} ... }; class CStuff: public virtual CUnivMem{ // CUnivMem を仮想クラスとして継承 int code; // 教職員コード public: CStuff(char *n, int c): CUnivMem(n) {cout << "CStuff 作成中\n"; code = c;} ... }; class CTA: public CStuff, public CStudent { int code; // TA コード public: CTA(char *n, int stf_c, int std_c, int ta_c): CStuff(n, stf_c), CStudent(n, std_c), CUnivMem(n) { cout << "CTA 作成中\n"; code = ta_c; } void print() { cout << ShowName() << '\n'; // 正。曖昧ではない cout << CStuff::ShowCode() << '\n'; cout << CStudent::ShowCode() << '\n'; cout << code << '\n'; } }; int main() { CTA t("Jiro", 1003, 5046, 53); t.print(); return 0; } |
| #include enum {mei = 1867, tai = 1911, sho = 1925, hei = 1988}; class CCalendar { ... }; int CCalendar::ShowWD() { ... } class JCalendar: public virtual CCalendar { char name[10]; // 国名 public: JCalendar(char* n, int y, int m, int d): CCalendar(y,m,d) {strcpy(name, n);} char* ShowName() {return name;} void print(); }; void JCalendar::print() { ... } class ECalendar: public virtual CCalendar { int code; // 国コード public: ECalendar(int c, int y, int m, int d): CCalendar(y, m, d) {code = c;} int ShowCode(){return code;} void print(); }; void ECalendar::print() { ... } class EJCalendar: public ECalendar, public JCalendar { char name[10]; // 地域名 public: EJCalendar(char *n, char *nn, int c, int y, int m, int d): ECalendar(c, y, m, d), JCalendar(n, y, m, d), CCalendar(y, m, d) { strcpy(name, nn); } char *ShowName() {return name;} void print(); }; void EJCalendar::print() { ... } int main() { EJCalendar cej("JPN", "Tokyo", 10, 1998, 12, 30); ECalendar ce(1, 1998, 12, 1); ce.print(); cej.print(); } |