Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.83
KuckaMAXHATKA
1 / 1 / 0
Регистрация: 20.02.2011
Сообщений: 27
#1

Классы и конструкторы - C++

12.12.2011, 22:29. Просмотров 4308. Ответов 13
Метки нет (Все метки)

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 <string.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
class automobile//создаём класс automobile
 
{ 
    
public:
 
    int passegers;//свойство - кол-во пассажиров
    double speed;//свойство - скорость автомобиля
    void show_automobile(void);//метод - показать информацию о автомобиле
    void get_passeger(void);//метод - добавить пасажира
    void the_end(void);//метод - конец пути
    void speed_up(void);//метод - повысить скорость
    void speed_down(void);//метод - понизить скорость
    automobile(char*,int,int);//конструктор
    
private:
 
    char model[64];//свойство - модель автомобиля
    int maxpassegers;//свойство - максимальное кол-во пассажиров
    int maxspeed;//свойство - максимальная скорость автомобиля
};
 
void automobile::show_automobile(void)
   { 
      cout << "Model name:" << model << endl;
      cout << "Number of passegers " << passegers << endl; 
      cout << "Speed:" << speed << endl;
    }
 
void automobile::speed_up(void)
   {
       speed=speed+5;
   }
 
void automobile::speed_down(void)
   {
      speed=speed+5;
   }
 
void automobile::get_passeger(void)
    {
      passegers++;
      if(passegers==maxpassegers)
          cout<<"Car is full!"<<endl;
      if(passegers>maxpassegers)
          cout<<"Error"<<endl;
     }
 
void automobile::the_end()
    {
        passegers=0;
        speed=0;
    }
automobile::automobile(char *model, int maxpassegers, int maxspeed)
 
{ 
   strcpy(automobile::model, model); 
   automobile::maxpassegers=maxpassegers;
   automobile::maxspeed=maxspeed;
}
 
int main()
{
     automobile car1("Renault Laguna", 5, 200);//создаём автомобиль car1 с названием модели
                                               //Renault Laguna, максимальным количеством
                                               // пассажиров - 5 и максимальной скоростью -
                                               //200.
     car1.show_automobile;
 
        
   getch();
};
Я тут балуюсь с классами, пытаюсь понять. подскажите пожалуйста! В чём ошибка и как её исправить? Жду от вас скорейшего ответа!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.12.2011, 23:21     Классы и конструкторы #2
Цитата Сообщение от KuckaMAXHATKA Посмотреть сообщение
В чём ошибка и как её исправить?
ошибка в том что вы не умеете задавать вопросы, в чём проблема? код не компилируется? или код неправильно работает?
Bers
Заблокирован
12.12.2011, 23:25     Классы и конструкторы #3
1. Работает, но делает не то что надо. (описание неисправности)

2. Крошится в рантайме, под ругательства системы. (скриншот, или примерное описание текста сообщение системы)

3. Не компилируется. (Точный текст ошибки компилятора. Желательно - с указанием точных строчек кода, на которые ругнулся компилятор)

4. Не компонуется. (Точный текст ошибки компоновщика.)

Телепаты в отпуске.
KuckaMAXHATKA
1 / 1 / 0
Регистрация: 20.02.2011
Сообщений: 27
12.12.2011, 23:28  [ТС]     Классы и конструкторы #4
Да, сорри. В общем компилятор выдаёт:

Warning 1 warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 62


Error 2 error C3867: 'automobile::show_automobile': function call missing argument list; use '&automobile::show_automobile' to create a pointer to member c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 73
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
12.12.2011, 23:31     Классы и конструкторы #5
C++
1
car1.show_automobile();
А первое это не ошибка, а предупреждение.
Bers
Заблокирован
12.12.2011, 23:31     Классы и конструкторы #6
Цитата Сообщение от KuckaMAXHATKA Посмотреть сообщение
car1.show_automobile;
Это что? Функция, или где?
KuckaMAXHATKA
1 / 1 / 0
Регистрация: 20.02.2011
Сообщений: 27
12.12.2011, 23:38  [ТС]     Классы и конструкторы #7
Цитата Сообщение от gooseim Посмотреть сообщение
C++
1
car1.show_automobile();
А первое это не ошибка, а предупреждение.
Да! Спасибо! Теперь работает! :-D
Bers
12.12.2011, 23:41
  #8

Не по теме:

KuckaMAXHATKA, добрый совет: не пропускайте мимо глаз предупреждения компилятора.

Если, несмотря на предупреждения, программа заработала, это не значит, что с нею все в порядке.
Возможно она содержит мину замедленного действия.

KuckaMAXHATKA
1 / 1 / 0
Регистрация: 20.02.2011
Сообщений: 27
13.12.2011, 00:08  [ТС]     Классы и конструкторы #9
После решения этой небольшой проблемы возникла новая. На этот раз я добавил два int в конструктор:
C++
1
2
public:
automobile(char*,int,int,int);//конструктор
C++
1
2
3
4
5
6
7
8
9
automobile::automobile(char *model, int maxpassegers, int maxspeed, int speed, int passegers)
 
{ 
   strcpy(automobile::model, model); 
   automobile::maxpassegers=maxpassegers;
   automobile::maxspeed=maxspeed;
   automobile::speed=speed;
   automobile::passegers=passegers;
}
C++
1
2
3
4
5
6
7
8
int main()
{
     automobile car1("Renault Laguna", 5, 200,0,0);
     car1.show_automobile();
 
        
   getch();
};
И господин компилятор выдал:


Error 1 error C2511: 'automobile::automobile(char *,int,int,int,int)' : overloaded member function not found in 'automobile' c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 61
Error 2 error C2661: 'automobile::automobile' : no overloaded function takes 5 arguments c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 71
3 IntelliSense: no instance of overloaded function "automobile::automobile" matches the specified type c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 59
4 IntelliSense: no instance of constructor "automobile::automobile" matches the argument list c:\users\maxstar\documents\visual studio2010\projects\oop_lab1\oop_lab1\main.cpp 71

Почему функция перегружена? Как это исправить?
Bers
Заблокирован
13.12.2011, 00:11     Классы и конструкторы #10
Цитата Сообщение от KuckaMAXHATKA Посмотреть сообщение
И господин компилятор выдал:
А как вы объект создаёте?
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
13.12.2011, 00:26     Классы и конструкторы #11
KuckaMAXHATKA, в объявлении 4 переменных, в определении - 5
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
13.12.2011, 00:56     Классы и конструкторы #12
задекларировали конструктор с тремя интами, а заимплементили с четырьмя, т.е. сигнатуры конструкторов не совпадают. => господин компилятор недоволен.
Могу помочь
0 / 0 / 1
Регистрация: 15.02.2014
Сообщений: 4
15.02.2014, 21:23     Классы и конструкторы #13
Цитата Сообщение от KuckaMAXHATKA Посмотреть сообщение
После решения этой небольшой проблемы возникла новая. На этот раз я добавил два int в конструктор:
C++
1
2
public:
automobile(char*,int,int,int);//конструктор
C++
1
2
3
4
5
6
7
8
9
automobile::automobile(char *model, int maxpassegers, int maxspeed, int speed, int passegers)
 
{ 
   strcpy(automobile::model, model); 
   automobile::maxpassegers=maxpassegers;
   automobile::maxspeed=maxspeed;
   automobile::speed=speed;
   automobile::passegers=passegers;
}
C++
1
2
3
4
5
6
7
8
int main()
{
     automobile car1("Renault Laguna", 5, 200,0,0);
     car1.show_automobile();
 
        
   getch();
};
И господин компилятор выдал:


Error 1 error C2511: 'automobile::automobile(char *,int,int,int,int)' : overloaded member function not found in 'automobile' c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 61
Error 2 error C2661: 'automobile::automobile' : no overloaded function takes 5 arguments c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 71
3 IntelliSense: no instance of overloaded function "automobile::automobile" matches the specified type c:\users\maxstar\documents\visual studio 2010\projects\oop_lab1\oop_lab1\main.cpp 59
4 IntelliSense: no instance of constructor "automobile::automobile" matches the argument list c:\users\maxstar\documents\visual studio2010\projects\oop_lab1\oop_lab1\main.cpp 71

Почему функция перегружена? Как это исправить?
По-моему, при присваивании значений maxspeed, passengers и т.д. нужно после automobile ставить точку, ведь Вы обращаетесь к элементу класса?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2014, 21:38     Классы и конструкторы
Еще ссылки по теме:

C++ классы (конструкторы, дестрцкторы, функции членов класса)
C++ Классы, конструкторы (найти ошибку)
Конструкторы и классы C++
Классы, конструкторы C++
Классы, Конструкторы, Деструкторы. Отредактировать программу C++

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

Или воспользуйтесь поиском по форуму:
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
15.02.2014, 21:38     Классы и конструкторы #14
Могу помочь, купите себе календарь - этим вы окажете огромную помощь.
Yandex
Объявления
15.02.2014, 21:38     Классы и конструкторы
Ответ Создать тему
Опции темы

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