Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 29
1

Наследование и конструктор с параметрами

14.10.2019, 21:12. Просмотров 1019. Ответов 8

Добрый вечер! При разработке программы столкнулся с проблемой. По условию нужно использовать конструкторы с параметрами и в конечном итоге возникли проблемы с выводом. Помогите, пожалуйста!

P.S. На самом деле программа содержит несколько фруктов, оставил одни яблоки в надежде на помощь с выводом, остальное уже по аналогии сделаю) Спасибо!

C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <cstring>
 
using namespace std;
enum Yn { no, yes };
enum color { red, yellow, green, orange };
enum growing { bush, vine, plantation };//Где произрастает
void out(enum Yn x);
char *c[] = { "red", "yellow", "green", "orange" };
char *g[] = { "bush", "vine", "plantation" };
// Родовой класс фруктов
class fruit {
    // В этом базовом классе все элементы открыты
public:
    enum Yn annual;//Однолетнее растение
    enum Yn perennial;//Многолетнее растение
    enum Yn tree;//Дерево
    enum Yn tropical;//Растет в тропиках
    enum Yn drying;//Сушат ли его обычно?
    enum Yn boiling;//Варят ли его обычно?
    enum Yn preservation;//Консервируют ли обычно?
    enum color clr;//Цвет плода
    char name[40];//Название
};
 
// Производный класс яблок
class Apple : public fruit {
    enum Yn cooking;//Можно приготовить пищу
    enum Yn crunchy;//Хрустящее
    enum Yn eating;//Съедобное
    char healprop[100];//Целебные свойства
public:
    //void seta(char *n, enum color c, enum Yn ck, enum Yn crchy, enum Yn e, char *hp);
    void show();
    Apple()
    {
 
    }
    Apple(char *n, enum color c, enum Yn ck, enum Yn crchy, enum Yn e, char *hp)
    {
        strcpy(name, n); annual = no; perennial = yes; tree = yes; tropical = no;
        drying = yes; boiling = yes; preservation = yes;
        clr = c; cooking = ck; crunchy = crchy; eating = e;
        strcpy(healprop, hp);
    }
};
 
void Apple::show()
{
    cout << name << " яблоко - это: " << "\n";
    cout << "Однолетнее растение: " << annual;
    cout << "Многолетнее растение: " << perennial;
    cout << "Дерево: " << tree;
    cout << "Тропическое: " << tropical;
    cout << "Сушка: " << drying;
    cout << "Варка: " << boiling;
    cout << "Консервирование: " << preservation;
    cout << "Цвет: " << clr << "\n";
    cout << "Легко приготавливается: " << cooking;
    cout << "Хрустит на зубах: " << crunchy;
    cout << "Съедобное: " << eating;
    cout << "Полезные свойства: " << healprop << "\n";
    cout << "\n";
}
 
void out(enum Yn x)
{
    if (x == no) cout << "нет\n";
    else cout << "да\n";
}
int main()
{
    setlocale(LC_ALL, "Russian");
    Apple a1(char *n, enum color c, enum Yn ck, enum Yn crchy, enum Yn e, char *hp);
    a1.show();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2019, 21:12
Ответы с готовыми решениями:

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по...

Определить конструктор без параметров, конструктор с одним параметром, конструктор с двумя параметрами, деструктор
Создать класс «матрица». Данный класс должен содержать элементы типа int, определяющие число строк,...

Конструктор с параметрами И конструктор по умолчанию. Как?
Опять прошу совета. Выполняю тут из интернета задания. Класс надо создать, там будут конструкторы и...

Конструктор (с параметрами)
public Osob (Osob o1, Osob o2){ int crossPoint = (int)(Math.random() * 10); ...

8
565 / 348 / 132
Регистрация: 15.09.2017
Сообщений: 1,230
14.10.2019, 21:25 2
Стас5486, Что-то я даже потерялся в вашем коде среди кучи ошибок и неправильной реализации, пытаясь понять, что вы хотите сделать

Добавлено через 3 минуты
Не, не могу себя пересилить и попытаться понять, выкиньте свой код и напишите условие задачи
0
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 29
14.10.2019, 21:43  [ТС] 3
В общем есть исходная программа, которая определяет общий базовый класс fruit, где задаются общие характеристики фруктов, и два класса Apple – яблоко и Orange - апельсин, которые содержат специальную информацию об этих фруктах.

C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <cstring>
#include <rusconsole.h>
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;
}
Мне нужно написать мою версию программы, используя конструкторы с параметрами. Версия должная учитывать, что фрукты могут расти и на кустах, и на лозе и на бахче. Так же возможны различные варианты их переработки-варка, сушка, консервирование и наличие целебных свойств.
0
565 / 348 / 132
Регистрация: 15.09.2017
Сообщений: 1,230
14.10.2019, 22:39 4
Лучший ответ Сообщение было отмечено Стас5486 как решение

Решение

Стас5486, Ну хотя бы как-то так:
C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
enum Color { red, yellow, green, orange };
vector<string> vColor = { "red", "yellow", "green", "orange" };
 
 
class fruit {
public:
    bool annual;        //Однолетнее растение
    bool perennial;     //Многолетнее растение
    bool tree;          //Дерево
    bool tropical;      //Растет в тропиках
    string color;       //Цвет плода
    string name;        //Название
};
 
 
class Apple : public fruit {
    bool cooking;       //Можно приготовить пищу
    bool crunchy;       //Хрустящее
    bool eating;        //Съедобное
public:
    void seta(string n, Color c, bool ck, bool crchy, bool e);
    void show();
};
 
 
void Apple::seta(string n, Color c, bool ck, bool crchy, bool e) {
    name = n;
    annual = false;
    perennial = true;
    tree = true;
    tropical = false;
    color = vColor[c];
    cooking = ck;
    crunchy = crchy;
    eating = e;
}
 
string printBool(bool b) {
    if (b) return "да";
    else return "нет";
}
 
void Apple::show(){
    bool tmp = false;
    cout << name << " яблоко - это: " << "\n";
    cout << "Однолетнее растение: " << printBool(annual) << endl;
    cout << "Многолетнее растение: " << printBool(perennial) << endl;
    cout << "Дерево: " << printBool(tree) << endl;
    cout << "Тропическое: " << printBool(tropical) << endl;
    cout << "Цвет: " << color << endl << endl;
    cout << "Легко приготавливается: " << printBool(cooking) << endl;
    cout << "Хрустит на зубах: " << printBool(crunchy) << endl;
    cout << "Съедобное: " << printBool(eating) << endl;
    cout << endl;
}
 
 
int main(){
    setlocale(0, "");
    Apple a1;
    a1.seta("Уэлс", red, 0, 1, 1);
    a1.show();
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 29
14.10.2019, 22:44  [ТС] 5
Спасибо за помощь!
0
565 / 348 / 132
Регистрация: 15.09.2017
Сообщений: 1,230
14.10.2019, 22:48 6
можно даже ввести ваш enum с yes и no и вызывать конструктор так:
C++
1
Apple a1("Уэлс", red, 0, yes, no);
только не нужно пихать их везде, enum лучше использовать для удобства чтения кода, но не как тип, хотя как тип иногда полезно, но нужно знать меру.
Кстати, забыл про конструктор, вставить в класс в Apple в public:
C++
1
2
3
Apple(string n, Color c, bool ck, bool crchy, bool e) {
    seta(n, c, ck, crchy, e);
}
Добавлено через 2 минуты
Стас5486, 49-ая строчка в коде лишняя, считайте её мусором
1
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 29
14.10.2019, 22:53  [ТС] 7
Спасибо еще раз, что потратили на меня время! Очень помогли)
0
565 / 348 / 132
Регистрация: 15.09.2017
Сообщений: 1,230
14.10.2019, 22:54 8
И ещё совет, если у вас много данных нужно передавать в конструктор типа
C++
1
Object ob("sdfsdf",1,0,1,1,1,0,1,0);
то заведите лучше структуру этих параметров, заполняйте её отдельно и передавайте в объект структурой
C++
1
2
3
4
5
6
7
8
9
10
11
struct Param {
    bool one, two, three;
} param;
 
Apple(Param& p);
 
param.one = 1;
param.two = 1;
param.three = 0;
 
Apple a(param);
0
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 29
14.10.2019, 23:14  [ТС] 9
учту, благодарю
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2019, 23:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Конструктор с параметрами
Не получается конструктор с параметром.. помогите пожалуйста! вот весь класс, нужно чтобы можно...

Конструктор с параметрами
Добрый День/Вечер/Ночь! Возникла ситуация, с которой я не могу разобраться: в конструктор с двумя...

Конструктор с параметрами
Забыл как выводить конструктор с параметрами, пробую так не выходит. #include &lt;iostream&gt; using...

Конструктор с параметрами
Вот пример структуры моей программы. class Entity { protected: int id; public:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.