БЕСПЛАТНОЕ РЕШЕНИЕ ЗАДАЧ

Наследование в С++

Наследование позволяет строить иерархию классов, переходя от более общих к более специальным. Когда один класс наследуется другим, класс, который наследуется, называют базовым классом (base class). Наследующий класс называют производным классом (derived class). Обычно процесс наследования начинается с задания базового класса. Базовый класс определяет все те качества, которые будут общими для всех производных от него классов. Базовый класс представляет собой наиболее общее описание ряда характерных черт. Производный класс наследует эти общие черты и добавляет свойства, характерные только для него.

Пример. Наследование классов. Программа определяет общий базовый класс fruit, описывающий некоторые характеристики фруктов. Этот класс наследуется двумя производными классами Apple и Orange. Эти классы содержат специальную информацию о конкретном фрукте (яблоке или апельсине).

// Пример наследования классов
#include 
#include 
using namespace std;

enum yn {no, yes};
enum color {red, yellow, green, orange};

void out(enum yn x);

char *c[ ] = {
 "red", "yellow", "green", "orange"};

// Родовой класс фруктов
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 << "нет\n";
 else cout << "да\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;
}

Оставить комментарий

Вы должны быть авторизованы , чтобы оставить или оценить комментарий.

Онлайн всего: 151
Гостей: 151
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте