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

Задача на классы, конструктор с параметром и по умолчанию

04.06.2017, 16:33. Просмотров 920. Ответов 7

Скомпилировал, запустил.
Добавляю новые элементы... и все. Программа прекращает свою работу, окно закрывается. Этапы вывода новых значений и поиск по условию не выполняются. Подскажите, кто может, в чем дело? Что не так?

func.h
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
#ifndef _FUNC_H        //страж включения для предотвращения повторного
#define       _FUNC_H // включения содержимого файла в программу
#include <iostream>
using namespace std;
//  объявление класса
class Car {
public:
    Car();
    Car(string mrk, int pwr, int vlm, string clr);
    ~Car();
    string GetMark();
    void SetMark(string val);
    int GetPower();
    void SetPower(int val);
    int GetVolume();
    void SetVolume(int val);
    string GetColor();
    void SetColor(string val);
private:
    string Mark;
    int Power;
    int Volume;
    string Color;
};
//прототип внешней по отношению к классу функции
int maxpower(Car*, int);
#endif         /* _FUNC_H */
func.ccp
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
#include "stdafx.h"
#include <string>
// подключение собственного заголовочного файла, необходимое
// для согласования определений и объявлений в разных файлах проекта
#include "func.h"
using namespace std; // подключение области видимости пространства
                     // стандартных имен
 
                     //внешняя целевая функция
int maxpower(Car* c, int n) {
    int i, max = 0, maxnumber = 0;
    for (i = 0; i<n; i++) {
        if (c[i].GetPower()>max) {
            max = c[i].GetPower();
            maxnumber = i;
        }
    }
    cout <<"RESULT"<< endl << endl;
    cout << "Index of car with maximum power =< " << maxnumber + 1 << " ( " << c[maxnumber].GetMark() << " ) " << endl;
    return 0;
}
// конструктор по умолчанию
Car::Car() {
}
// конструктор с параметрами
Car::Car(string mrk, int pwr, int vlm, string clr) {
    Mark = mrk;
    Power = pwr;
    Volume = vlm;
    Color = clr;
}
 
//  деструктор по умолчанию – у нас явно в программе не вызывается,
// его можно в класс не включать
Car::~Car() {
}
// определение методов, которые будут работать с нашими данными
string Car::GetMark() {
    return(Mark);
}
 
void Car::SetMark(string val) {
    Mark = val;
}
 
int Car::GetPower() {
    return(Power);
}
 
void Car::SetPower(int val) {
    Power = val;
}
 
int Car::GetVolume() {
    return(Volume);
}
 
void Car::SetVolume(int val) {
    Volume = val;
}
 
string Car::GetColor() {
    return(Color);
}
 
void Car::SetColor(string val) {
    Color = val;
}
main.cpp
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
#include "stdafx.h"
#include "func.h"
#include <iostream>
#include <string>
using namespace std;
int main() {
    int k;
    // вызов конструктора по умолчанию
    Car C1;  //переменная C1 типа Car
             // вызов конструктора с параметрами
    Car C2("Toyota", 130, 50, "Green");
    // Т.к. объявление переменной  C1 создает объект, но не инициализирует //свойства,  придется обратиться к соответствующим методам Set…  
    //Обращение производится через имя объекта, точку (.) и обращение к
    //   соответствующему методу
    C1.SetMark("Nissan");
    C1.SetPower(150);
    C1.SetVolume(60);
    C1.SetColor("Red");
    // вывод значений переменных C1  и C2  на экран монитора
    cout<< C1.GetMark() << " " << C1.GetPower() << " " << C1.GetVolume() << " " << C1.GetColor() << endl;
    cout<< C2.GetMark() << " " << C2.GetPower() << " " << C2.GetVolume() << " " << C2.GetColor() << endl;
    Car C3[3]; // массив C3, состоящий из 3 элементов типа Car.
    string str1, str2;
    int val1, val2;
    cout << "input quantity of  elements of array -> ";
    cin >> k;
    //   инициализация элементов массива C3. 
    for (int i = 0; i<k; i++) {
        cout << "input mark -> ";
        cin >> str1;
        C3[i].SetMark(str1);
        cout << "input  power -> ";
        cin >> val1;
        C3[i].SetPower(val1);
        cout << "input  volume -> ";
        cin >> val2;
        C3[i].SetVolume(val2);
        cout << "input color -> ";
        cin >> str2;
        C3[i].SetColor(str2);
    }
    // вывод значений элементов массива C3 на экран монитора
    for (int i = 0; i<k; i++) cout << C3[i].GetMark() << " " << C3[i].GetPower() << " " << C3[i].GetVolume() << " " << C3[i].GetColor();
    cout <<"Max power: "<<maxpower(C3, k);       // вызов функции maxpower(C3,k)
    return  0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2017, 16:33
Ответы с готовыми решениями:

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public:...

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

Классы и конструктор по умолчанию/с параметрами
Помогите пожалуйста! Необходимо сконструировать класс с заданным набором...

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

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации...

7
Zazy
45 / 45 / 23
Регистрация: 14.04.2013
Сообщений: 186
04.06.2017, 17:09 2
в main 22 строка массив из 3 элементов, а в строке 26 вводится число которое может быть больше 3х.
1
Graduskipeniya
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 6
04.06.2017, 17:52  [ТС] 3
Исправил. Ситуация не меняется. После ввода значений, окно сразу же закрывается.

main.cpp
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
...
Car C3[3]; // массив C3, состоящий из 3 элементов типа Car.
    string str1, str2;
    int val1, val2;
    //cout << "input quantity of  elements of array -> ";
    //cin >> k;
    //   инициализация элементов массива C3. 
    for (int i = 0; i<3; i++) {
        cout << "input mark -> ";
        cin >> str1;
        C3[i].SetMark(str1);
        cout << "input  power -> ";
        cin >> val1;
        C3[i].SetPower(val1);
        cout << "input  volume -> ";
        cin >> val2;
        C3[i].SetVolume(val2);
        cout << "input color -> ";
        cin >> str2;
        C3[i].SetColor(str2);
    }
    // вывод значений элементов массива C3 на экран монитора
    for (int i = 0; i<3; i++) cout << C3[i].GetMark() << " " << C3[i].GetPower() << " " << C3[i].GetVolume() << " " << C3[i].GetColor();
    cout <<"Max power: "<<maxpower(C3, 3);       // вызов функции maxpower(C3,k)
    
    return  0;
}
Добавлено через 16 минут
Мне кажется, что дело в функции maxpower, но что именно, никак не пойму.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
04.06.2017, 17:55 4
Цитата Сообщение от Graduskipeniya Посмотреть сообщение
После ввода значений, окно сразу же закрывается.
Почему окно должно не закрываться? Запускаешь, наверное, не из командной строки, и остановки в main(), перед return, в коде нет.
0
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 365
Завершенные тесты: 3
04.06.2017, 18:05 5
Лучший ответ Сообщение было отмечено Graduskipeniya как решение

Решение

Graduskipeniya, В конце функции main перед
C++
1
return 0;
добавьте
C++
1
system("PAUSE");
1
Graduskipeniya
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 6
04.06.2017, 18:30  [ТС] 6
Спасибо большое! Помогло. Не подскажите только, как сделать так, чтобы значения выводились с отступом, с явным разделением (визуально), а то слитно все.


Тогда main.cpp будет выглядеть так:

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
#include "stdafx.h"
#include "func.h"
#include <iostream>
#include <string>
using namespace std;
int main() {
    int k;
    // вызов конструктора по умолчанию
    Car C1;  //переменная C1 типа Car
             // вызов конструктора с параметрами
    Car C2("Toyota", 130, 50, "Green");
    // Т.к. объявление переменной  C1 создает объект, но не инициализирует //свойства,  придется обратиться к соответствующим методам Set…  
    //Обращение производится через имя объекта, точку (.) и обращение к
    //   соответствующему методу
    C1.SetMark("Nissan");
    C1.SetPower(150);
    C1.SetVolume(60);
    C1.SetColor("Red");
    // вывод значений переменных C1  и C2  на экран монитора
    cout<< C1.GetMark() << " " << C1.GetPower() << " " << C1.GetVolume() << " " << C1.GetColor() << endl;
    cout<< C2.GetMark() << " " << C2.GetPower() << " " << C2.GetVolume() << " " << C2.GetColor() << endl;
    Car C3[3]; // массив C3, состоящий из 3 элементов типа Car.
    string str1, str2;
    int val1, val2;
    //cout << "input quantity of  elements of array -> ";
    //cin >> k;
    //   инициализация элементов массива C3. 
    for (int i = 0; i<3; i++) {
        cout << "input mark -> ";
        cin >> str1;
        C3[i].SetMark(str1);
        cout << "input  power -> ";
        cin >> val1;
        C3[i].SetPower(val1);
        cout << "input  volume -> ";
        cin >> val2;
        C3[i].SetVolume(val2);
        cout << "input color -> ";
        cin >> str2;
        C3[i].SetColor(str2);
    }
    // вывод значений элементов массива C3 на экран монитора
    for (int i = 0; i<3; i++)
        
    cout << C3[i].GetMark() << " " << C3[i].GetPower() << " " << C3[i].GetVolume() << " " << C3[i].GetColor();
    maxpower(C3, 3);       // вызов функции maxpower(C3,k)
    system("PAUSE");
    return  0;
}
0
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 365
Завершенные тесты: 3
04.06.2017, 19:47 7
Graduskipeniya, Если я Вас правильно понял, то вот так:
C++
1
2
3
    // вывод значений переменных C1  и C2  на экран монитора
    cout<< C1.GetMark() << " " << C1.GetPower() << " " << C1.GetVolume() << " " << C1.GetColor() << endl << endl;
    cout<< C2.GetMark() << " " << C2.GetPower() << " " << C2.GetVolume() << " " << C2.GetColor() << endl;
0
Nemovok
291 / 121 / 105
Регистрация: 30.10.2015
Сообщений: 688
Завершенные тесты: 2
04.06.2017, 20:17 8
Замените
C++
1
2
3
4
5
6
Car::Car(string mrk, int pwr, int vlm, string clr) {
    Mark = mrk;
    Power = pwr;
    Volume = vlm;
    Color = clr;
}
на
C++
1
Car::Car(string mrk, int pwr, int vlm, string clr) : Mark(mrk), Power(pwr), Volume(vlm), Color(clr) {}
0
04.06.2017, 20:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2017, 20:17

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и...

Конструктор с параметром C++
Приветствую! Изучая одну литературу столкнулся с конструктором в котором мне не...

конструктор с параметром
не могу понять в чем причина. В конструкторе с параметром вызываю функцию...


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

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

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