LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【C++】継承②

f:id:AtsuyaKoike:20190524095847p:plain:w300

study54.cpp

#include <iostream>
#include <cstring>
using namespace std;

enum yn { no, yes };
enum color { red, yellow, green, orange };
void out( enum yn x );
char *c[] = { "赤", "黄", "緑", "オレンジ" };

class fruit {
public:
    enum yn annual;
    enum yn perennial;
    enum yn tree;
    enum yn tropical;
    enum color clr;
    char name[40];
};

class Apple : public fruit {
    enum yn cooking;
    enum yn crunchy;
    enum yn eating;
public:
    void seta( char *n, enum color c, enum yn ck, enum yn crchy, enum yn e );
    void show();
};

class Orange : public fruit {
    enum yn juice;
    enum yn sour;
    enum yn eating;
public:
    void seto( char *n, enum color c, enum yn j, enum yn sr, enum yn e );
    void show();
};

void Apple::seta( char *n, enum color c, enum yn ck, enum yn crchy, enum yn e ) {
    strcpy( name, n );
    annual = no;
    perennial = yes;
    tree = yes;
    tropical = no;
    clr = c;
    cooking = ck;
    crunchy = crchy;
    eating = e;
}

void Orange::seto( char *n, enum color c, enum yn j, enum yn sr, enum yn e ) {
    strcpy( name, n );
    annual = no;
    perennial = yes;
    tree = yes;
    tropical = yes;
    clr = c;
    juice = j;
    sour = sr;
    eating = e;
}

void Apple::show() {
    cout << name << "りんご:\n";
    cout << "一年生植物:";    out( annual );
    cout << "多年生植物:";    out( perennial );
    cout << "木:";            out( tree );
    cout << "熱帯性:";        out( tropical );
    
    cout << "色:" << c[clr] << "\n";
    cout << "料理用";          out( cooking );
    cout << "かたい";          out( crunchy );
    cout << "食用";            out( eating );
    cout << "\n";
}

void Orange::show() {
    cout << name << "オレンジ:\n";
    cout << "一年生植物:";     out( annual );
    cout << "多年生植物:";     out( perennial );
    cout << "木:";             out( tree );
    cout << "熱帯性:";         out( tropical );

    cout << "色" << c[clr] << "\n";
    cout << "ジュース用:";     out( juice );
    cout << "酸っぱい:";       out( sour );
    cout << "食用:";           out( eating );
    cout << "\n";
}

void out( enum yn x ) {
    if ( x == no ) cout << "no\n";
    else cout << "yes\n";
}

int main() {
    Apple a1, a2;
    Orange o1, o2;

    a1.seta("レッドデリシャス", red, no, yes, yes );
    a2.seta("ジョナサン", red, yes, no, yes );

    o1.seto("ネーブル", orange, no, no, yes );
    o2.seto("バレンシア", orange, yes, yes, no);

    a1.show();
    a2.show();

    o1.show();
    o2.show();

    return 0;
}

コンパイル

$ g++ -o study54 study54.cpp

実行

レッドデリシャスりんご:
一年生植物:no
多年生植物:yes
木:yes
熱帯性:no
色:赤
料理用no
かたいyes
食用yes

ジョナサンりんご:
一年生植物:no
多年生植物:yes
木:yes
熱帯性:no
色:赤
料理用yes
かたいno
食用yes

ネーブルオレンジ:
一年生植物:no
多年生植物:yes
木:yes
熱帯性:yes
色オレンジ
ジュース用:no
酸っぱい:no
食用:yes

バレンシアオレンジ:
一年生植物:no
多年生植物:yes
木:yes
熱帯性:yes
色オレンジ
ジュース用:yes
酸っぱい:yes
食用:no

f:id:AtsuyaKoike:20190524100759j:plain:w200
独習C++ 第4版 https://www.amazon.co.jp/dp/4798119768