Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 33

Создать базовый класс Triad и производный класс vector3D

07.12.2016, 02:00. Показов 8936. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с заданием. Часть кода(vector3D) сделал, вроде работает
Нужно помочь с классом Triad.
Вот полное задание:
Реализовать функцию, получающую и возвращающую объекты базового класса. Продемонстрировать принцип подстановки.
Создать базовый класс Triad(тройка чисел) с операциями сложения с числом, умножения на число, проверки на равенство. Создать производный класс vector3D, задаваемый тройкой координат. Должны быть реализованы: операция сложения, скалярное произведение векторов.

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
#include <iostream>
#include <string>
using namespace std;
 
 
class vector3D {
public:
    int a;
    int b;
    int c;
 
    vector3D(int inita = 0, int initb = 0, int initc = 0) : a(inita), b(initb), c(initc) {};
 
        // сложение векторов
    vector3D operator+(vector3D v2) {
        vector3D vec;
        vec.a = a + v2.a;
        vec.b = b + v2.b;
        vec.c = c + v2.c;
        return vec;
    }
        // произведение векторов
    vector3D operator*(vector3D v2) {
        vector3D vec;
        vec.a = a*v2.a;
        vec.b = b*v2.b;
        vec.c = c*v2.c;
        return vec;
    }
 
 
    void show() {
        cout << a << "," << b << "," << c;
    }
 
};
 
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    int x1, y1, z1, x2, y2, z2;
    cout << "Координаты первого вектора: "; cin >> x1 >> y1 >> z1;
    cout << "Координаты второго вектора: "; cin >> x2 >> y2 >> z2;
 
    vector3D v1(x1, y1, z1);
    vector3D v2(x2, y2, z2);
 
    (v1 + v2).show();
    cout << endl;
    (v1*v2).show();
    cout << endl;
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.12.2016, 02:00
Ответы с готовыми решениями:

Базовый класс Triad и производный класс vector3D
Создать базовый класс Triad (тройка чисел) с операциями сложения с числом, умножения на число, проверки на равенство. Создать производный...

Создать базовый класс Тройка_чисел (Triad) и производный класс Time с полями часы, минуты и секунды
Наследование. Виртуальныефункции.Полиморфизм. 1. Цельзадания: 1) Создание консольного приложения, состоящего и - Базовый класс:...

Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date
Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date с полями: год, месяц и день....

30
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 33
12.12.2016, 18:11  [ТС]
Студворк — интернет-сервис помощи студентам
В общем попробовал вот так:
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <string>
using namespace std;
 
 
class Triad {
 
    double C1;
    double C2;
    double C3;
 
public:
    
    Triad() {
        cout << "Введите тройку чисел: "; cin >> C1 >> C2 >> C3;
    }
 
    Triad & operator += (double R)
    {
        C1 += R;
        C2 += R;
        C3 += R;
        return *this;
    }
 
    Triad & operator *= (double R)
    {
        C1 *= R;
        C2 *= R;
        C3 *= R;
        return *this;
    }
 
    bool Init(double D1, double D2, double D3)
    {
        if (C1 == D1 && C2 == D2 && C3 == D3) return 0;
        else return 1;
    }
 
    void Display(double R, double D1, double D2, double D3)
    {
        cout << "Сумма: " << &operator += (R) << endl;
        cout << "Произведение: " << &operator *= (R) << endl;
        if (Init(D1, D2, D3)) cout << "Пара троек чисел не равна" << endl;
        else cout << "Пара троек чисел равна" << endl;
    }
 
};
 
class vector3D: public Triad {
public:
    double a;
    double b;
    double c;
 
    vector3D(double inita = 0, double initb = 0, double initc = 0) : a(inita), b(initb), c(initc) {};
 
    vector3D operator+(vector3D v2) {
        vector3D vec;
        vec.a = a + v2.a;
        vec.b = b + v2.b;
        vec.c = c + v2.c;
        return vec;
    }
 
    vector3D operator*(vector3D v2) {
        vector3D vec;
        vec.a = a*v2.a;
        vec.b = b*v2.b;
        vec.c = c*v2.c;
        return vec.a + vec.b + vec.c;
    }
 
 
    void showPlus() {
        cout << a << "," << b << "," << c;
    }
 
    void showProizv() {
        cout << a + b + c;
    }
 
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    double R, D1, D2, D3;
    char wish;
    double x1, y1, z1, x2, y2, z2;
    // Triad
    do
    {
        Triad operations;
        double R;
        cout << "Введите число, с которым будут осуществляться операции: "; cin >> R;
        cout << "Введите тройку чисел с которой будет проверено равенство: "; cin >> D1 >> D2 >> D3;
        operations.Display(R, D1, D2, D3);
        cout << "Если вы хотите ввести новые данные, нажмите y/Y, если нет, нажмите n/N: "; cin >> wish;
 
    } while (wish == 'Y' || wish == 'y' || wish == 'н' || wish == 'Н');
    
    // Vector3D
    do
    {
        cout << "Ввод координат первого вектора: "; cin >> x1 >> y1 >> z1;
        cout << "Ввод координат второго вектора: "; cin >> x2 >> y2 >> z2;
 
        vector3D v1(x1, y1, z1);
        vector3D v2(x2, y2, z2);
 
        cout << "Сложение: " << endl;
        (v1 + v2).showPlus();
        cout << endl;
        cout << "Произведение: " << endl;
        (v1*v2).showProizv();
        cout << endl;
        cout << "Если вы хотите ввести новые данные, нажмите y/Y, если нет, нажмите n/N: "; cin >> wish;
    }while (wish == 'Y' || wish == 'y' || wish == 'н' || wish == 'Н');
    
    system("pause");
    return 0;
}
Выводит что-то не то, то ли адрес ячейки то ли что... Что делает return *this? Я не понимаю

Добавлено через 5 минут
оператор умножению сделал по вашему образцу, ввод решил все таки через конструктор реализовать
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.12.2016, 20:45
То, что у тебя называется Init, и есть по сути конструктор (только без bool). А твой конструктор должен быть как обычная функция.
Ну если тебя всё устраивает, оставь так.
0
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 33
12.12.2016, 21:10  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
То, что у тебя называется Init, и есть по сути конструктор (только без bool). А твой конструктор должен быть как обычная функция.
Ну если тебя всё устраивает, оставь так.
В том-то и дело, что ответ получается какой-то странный
Цитата Сообщение от bekkonrofl Посмотреть сообщение
Выводит что-то не то, то ли адрес ячейки то ли что... Что делает return *this? Я не понимаю
Добавлено через 1 минуту
То есть мы можем содержимое функции Init, а именно условие внутри нее закинуть в конструктор Triad? Я правильно понимаю?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.12.2016, 21:20
Так примерно должно быть:
C++
1
2
3
4
5
        Triad t(); // ввод в твоём конструкторе
        double R;
        cout << "Введите число, с которым будут осуществляться операции: "; cin >> R;
        t += R;
        t *= R;
Умножение возвращает число.
C++
1
2
3
4
5
6
7
    double operator*(vector3D v2) {
        vector3D vec;
        vec.a = a*v2.a;
        vec.b = b*v2.b;
        vec.c = c*v2.c;
        return vec.a + vec.b + vec.c;
    }
Операции с вектором:
C++
1
2
        Vector3D v = v1 + v2;
        double p = v1 * v2;
И конструктор копирования добавь в Vector3D.

Добавлено через 38 секунд
Цитата Сообщение от bekkonrofl Посмотреть сообщение
Что делает return *this?
Возвращает ссылку на сам объект.
0
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 33
12.12.2016, 22:25  [ТС]
C++
1
2
3
4
5
Triad t(); // ввод в твоём конструкторе
        double R;
        cout << "Введите число, с которым будут осуществляться операции: "; cin >> R;
        t += R;
        t *= R;
Теперь выдает ошибку в t
t += R;
t *= R;
выражение должно быть допустимым для изменения левосторонним значением
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.12.2016, 11:14
Скобки убери.
C++
1
Triad t;
0
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 33
22.12.2016, 14:11  [ТС]
Все практически работает
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
using namespace std;
 
 
class Triad {
public:
    double C1;
    double C2;
    double C3;
    
    Triad() : C1(0), C2(0), C3(0)
    {
        cout << "Введите тройку чисел: "; cin >> C1 >> C2 >> C3;
    }
 
    Triad operator+(double R)
    {
        Triad Lec;
        Lec.C1 += R;
        Lec.C2 += R;
        Lec.C3 += R;
        return Lec;
    }
 
 
    Triad operator*(double R)
    {
        Triad Lec;
        Lec.C1 *= R;
        Lec.C2 *= R;
        Lec.C3 *= R;
        return Lec;
    }
 
 
    bool Init(double D1, double D2, double D3)
    {
        if (C1 == D1 && C2 == D2 && C3 == D3) return 0;
        else return 1;
    }
 
    void Display(double D1, double D2, double D3)
    {
        
        
        if (Init(D1, D2, D3)) cout << "Пара троек чисел не равна" << endl;
        else cout << "Пара троек чисел равна" << endl;
    }
    
    void showPl()
    {
        cout << C1 << "," << C2 << "," << C3 << endl;
    }
    
    void showPr()
    {
        cout << C1 + C2 + C3 << endl;
    }
};
 
class vector3D: public Triad {
public:
    double a;
    double b;
    double c;
 
    vector3D(double inita = 0, double initb = 0, double initc = 0) : a(inita), b(initb), c(initc) {};
 
    vector3D operator+(vector3D v2) {
        vector3D vec;
        vec.a = a + v2.a;
        vec.b = b + v2.b;
        vec.c = c + v2.c;
        return vec;
    }
 
    vector3D operator*(vector3D v2) {
        vector3D vec;
        vec.a = a*v2.a;
        vec.b = b*v2.b;
        vec.c = c*v2.c;
        return vec.a + vec.b + vec.c;
    }
 
 
    void showPlus() {
        cout << a << "," << b << "," << c;
    }
 
    void showProizv() {
        cout << a + b + c;
    }
 
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    double D1, D2, D3;
    char wish;
    double x1, y1, z1, x2, y2, z2;
    // Triad
    do
    {
        double R;
        Triad t;
        
        cout << "Введите число, с которым будут осуществляться операции: "; cin >> R;
        cout << "Введите тройку чисел с которой будет проверено равенство: "; cin >> D1 >> D2 >> D3;
        cout << "Сложение: " << endl;
        (t + R).showPl();
        cout << "Произведение: " << endl;
        (t * R).showPr();
        (t).Display(D1, D2, D3);
        cout << "Если вы хотите ввести новые данные, нажмите y/Y, если нет, нажмите n/N: "; cin >> wish;
 
    } while (wish == 'Y' || wish == 'y' || wish == 'н' || wish == 'Н');
    
    // Vector3D
    do
    {
        cout << "Ввод координат первого вектора: "; cin >> x1 >> y1 >> z1;
        cout << "Ввод координат второго вектора: "; cin >> x2 >> y2 >> z2;
 
        vector3D v1(x1, y1, z1);
        vector3D v2(x2, y2, z2);
 
        cout << "Сложение: " << endl;
        (v1 + v2).showPlus();
        cout << endl;
        cout << "Произведение: " << endl;
        (v1*v2).showProizv();
        cout << endl;
        cout << "Если вы хотите ввести новые данные, нажмите y/Y, если нет, нажмите n/N: "; cin >> wish;
    }while (wish == 'Y' || wish == 'y' || wish == 'н' || wish == 'Н');
    
    system("pause");
    return 0;
}
Единственное но, хоть и операции у класса Triad работают, выглядит это коряво
Миниатюры
Создать базовый класс Triad и производный класс vector3D  
0
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 33
22.12.2016, 14:14  [ТС]
Как видите, ввод получается три раза, а первый значит совершенно бесполезен. Должно же вводится все по одному разу, и соответственно после этого идет вывод
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.12.2016, 19:25
Ты сам придумал такой конструктор с вводом. Сделай обычный, а ввод - в отдельную функцию, или >> используй.
0
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 33
23.12.2016, 03:44  [ТС]
Как в конструктор занести значения, которые мы вводим в функции Read()?
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
using namespace std;
 
 
class Triad {
public:
    double C1;
    double C2;
    double C3;
    
    
    Triad() : C1(), C2(), C3() {};
    
 
    Triad operator+(double R)
    {
        Triad Lec;
        Lec.C1 += R;
        Lec.C2 += R;
        Lec.C3 += R;
        return Lec;
    }
 
 
    Triad operator*(double R)
    {
        Triad Lec;
        Lec.C1 *= R;
        Lec.C2 *= R;
        Lec.C3 *= R;
        return Lec;
    }
 
 
    bool Init(double D1, double D2, double D3)
    {
        if (C1 == D1 && C2 == D2 && C3 == D3) return 0;
        else return 1;
    }
 
    void Display(double D1, double D2, double D3)
    {
        
        
        if (Init(D1, D2, D3)) cout << "Пара троек чисел не равна" << endl;
        else cout << "Пара троек чисел равна" << endl;
    }
    
    void showPl()
    {
        cout << C1 << "," << C2 << "," << C3 << endl;
    }
    
    void showPr()
    {
        cout << C1 + C2 + C3 << endl;
    }
 
    void Read()
    {
        cout << "Введите тройку чисел: "; cin >> C1 >> C2 >> C3;
    }
 
    
};
 
class vector3D: public Triad {
public:
    double a;
    double b;
    double c;
 
    vector3D(double inita = 0, double initb = 0, double initc = 0) : a(inita), b(initb), c(initc) {};
 
    vector3D operator+(vector3D v2) {
        vector3D vec;
        vec.a = a + v2.a;
        vec.b = b + v2.b;
        vec.c = c + v2.c;
        return vec;
    }
 
    vector3D operator*(vector3D v2) {
        vector3D vec;
        vec.a = a*v2.a;
        vec.b = b*v2.b;
        vec.c = c*v2.c;
        return vec.a + vec.b + vec.c;
    }
 
 
    void showPlus() {
        cout << a << "," << b << "," << c;
    }
 
    void showProizv() {
        cout << a + b + c;
    }
 
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    double D1, D2, D3, C1, C2, C3;
    char wish;
    double x1, y1, z1, x2, y2, z2;
    // Triad
    do
    {
        double R;
        Triad t;
        t.Read();
        cout << "Введите число, с которым будут осуществляться операции: "; cin >> R;
        cout << "Введите тройку чисел с которой будет проверено равенство: "; cin >> D1 >> D2 >> D3;
        cout << "Сложение: " << endl;
        (t + R).showPl();
        cout << "Произведение: " << endl;
        (t * R).showPr();
        (t).Display(D1, D2, D3);
        cout << "Если вы хотите ввести новые данные, нажмите y/Y, если нет, нажмите n/N: "; cin >> wish;
 
    } while (wish == 'Y' || wish == 'y' || wish == 'н' || wish == 'Н');
    
    // Vector3D
    do
    {
        cout << "Ввод координат первого вектора: "; cin >> x1 >> y1 >> z1;
        cout << "Ввод координат второго вектора: "; cin >> x2 >> y2 >> z2;
 
        vector3D v1(x1, y1, z1);
        vector3D v2(x2, y2, z2);
 
        cout << "Сложение: " << endl;
        (v1 + v2).showPlus();
        cout << endl;
        cout << "Произведение: " << endl;
        (v1*v2).showProizv();
        cout << endl;
        cout << "Если вы хотите ввести новые данные, нажмите y/Y, если нет, нажмите n/N: "; cin >> wish;
    }while (wish == 'Y' || wish == 'y' || wish == 'н' || wish == 'Н');
    
    system("pause");
    return 0;
}
У меня получается, что C1, C2, C3 всегда равны нулю, видимо потому что C1(),C2(),C3() Но как это исправить?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.12.2016, 19:25
Или += используй или запиши как положено простой +
C++
1
2
3
4
5
6
7
8
    Triad operator+(double R)
    {
        Triad Lec;
        Lec.C1 = С1 + R;
        Lec.C2 = С2 + R;
        Lec.C3 = С3 + R;
        return Lec;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2016, 19:25
Помогаю со студенческими работами здесь

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

Создать базовый класс - Array и производный класс - Money для работы денежной суммы
ПОМОГИТЕ, ПОЖАЛУЙСТА, С ЗАДАЧЕЙ Создать базовый класс - Array и производный класс - Money для работы денежной суммы

Создать базовый класс Car (машина) и производный класс Lorry (грузовик): ООП ошибки
Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цилиндров, мощностью. Определить методы переназначения...

Создать базовый класс Polygon и производный класс Triangle
Создать базовый класс Polygon (многоугольник). Класс должен содержать методы для рисования многоугольника, вычисления периметра, нахождения...

Создать класс Triad (тройка чисел) - определить методы; определить производный класс Date - переопределить методы
Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить производный класс Date с полями: год, месяц и день....


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru