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

классы - C++

Восстановить пароль Регистрация
 
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
07.03.2011, 19:41     классы #1
здравствуйте. помогите, пожалуйста, доделать программу.
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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
 const int size=50;
 
  class COUNTRY {
 
  public:
  COUNTRY();
  COUNTRY(char*, char*, float);
  COUNTRY(const COUNTRY&);
  ~COUNTRY();
  char* GetName();
  char* GetForm();
  float GetSq();
  void SetName(char*);
  void SetForm(char*);
  void SetSq(float);
  void Set(char*, char*, float);
  void print();
 
  private:
  char name[size];
  char form[size];
  float sq;
  };
 
 COUNTRY::COUNTRY (char*NAME, char*FORM, float SQ) // konstyktor s paramentrami
 {
 strcpy(name,NAME);
 strcpy(form,FORM);
 sq=SQ;
// Set(name, form, sq);
 }
 
 COUNTRY::COUNTRY () // konstryktor s ymalchivaemimy parametrami
 {
 char NAME[size]="Russia";
 char FORM[size]="Federation Republic";
 double SQ=7887454.47;
 strcpy(name,NAME);
 strcpy(form,FORM);
 sq=SQ;
 }
 
 COUNTRY::COUNTRY (const COUNTRY&c) // konstryktor kopirovaniya
 {
 strcpy(name, c.name);
 strcpy(form, c.form);
 sq=c.sq;
    cout <<"Konstruktor kopirovaniya vizvan dlya: " << endl;
     print();
 }
 
 COUNTRY::~COUNTRY()
 {
    cout <<"Destruktor vizvan dlya: " << name << endl;
    delete []name;
 }
 
 void COUNTRY::print()
 {
    cout <<"Nazvanie strani: " << name << endl;
    cout <<"Forma pravleniya: " << form << endl;
    cout <<"Ploshad: " << sq << endl;
    cout << endl;
 }
 
 void COUNTRY::Set(char*name, char*form, float sq)
  {
  SetName(name);
  SetForm(form);
  SetSq(sq);
 strcpy (COUNTRY::name, name);
 strcpy (COUNTRY::form, form);
 COUNTRY::sq=sq;
  }
 
  void COUNTRY::SetName (char* name)
  {
    cout << "Strana? " << endl;
        cin >> name;
  }
 
  void COUNTRY::SetForm (char* form)
  {
    cout << "Forma pravleniya? " << endl;
        cin >> form;
  }
 
  void COUNTRY::SetSq (float sq)
  {
    cout << "Ploshad? " << endl;
        cin >> sq;
  }
 
  char* COUNTRY::GetName() {return name;}
  char* COUNTRY::GetForm() {return form;}
  float COUNTRY::GetSq() {return sq;}
 
 void main ()
 {
  clrscr();
  COUNTRY a;
    cout << "Konstryktor s ymalchivaemimy paramentramy vizvan dlya:" << endl;
     a.print();
 
    cout << "Konstryktor s paramentramy vizvan dlya: " << endl;
  COUNTRY w("Spain", "Monarchy", 984571.9);
     w.print();
 
  COUNTRY n=w;
  getch();
 }
не могу понять куда подключить функцию Set
необходимо чтобы вначале выдало все 3 конструктора, затем предложило ввести данные с клавиатуры и опять выдало 3 конструктора, только с учетом внесенных изменений.

пробовал в конструктор с параметрами впихнуть Set, но тогда изначально выдается только конструктор с умалчиваемыми параметрами и сразу предлагается ввести данные ..
C++
1
2
3
4
5
6
7
 COUNTRY::COUNTRY (char*NAME, char*FORM, float SQ) // konstyktor s paramentrami
 {
 strcpy(name,NAME);
 strcpy(form,FORM);
 sq=SQ;
 Set(name, form, sq);
 }
Добавлено через 1 минуту
и еще такая проблема .. при вводе с клавиатуры (при помощи ф-ции Set) программа не изменяет площадь, а просто копирует ее отсюда
COUNTRY w("Spain", "Monarchy", 984571.9);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2011, 19:41     классы
Посмотрите здесь:

Классы C++
C++ КЛАССЫ
C++ Классы
классы C++ C++
С++ классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.03.2011, 19:51     классы #2
LAans, Не понял, что вам нужно. Set для изменения членов класса извне - следовательно использовать в конструкторе я большого резона не вижу. Ну только если чтобы конструктор был маленький - сразу вызывать Set.
Да и вообще я немного не втыкаю что вы хотите сделать. Вы создаете сначала пустой объект (с констром по умолчанию), затем с констром с параметрами, выводите их... Что не так-то?
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
07.03.2011, 19:57  [ТС]     классы #3
Цитата Сообщение от ForEveR Посмотреть сообщение
LAans, Не понял, что вам нужно. Set для изменения членов класса извне - следовательно использовать в конструкторе я большого резона не вижу. Ну только если чтобы конструктор был маленький - сразу вызывать Set.
Да и вообще я немного не втыкаю что вы хотите сделать. Вы создаете сначала пустой объект (с констром по умолчанию), затем с констром с параметрами, выводите их... Что не так-то?
нужно чтоб изначально при запуске программы выдало 3 конструктора:
1) с умалчиваемыми параметрами
2) с параметрами
3) копирования (копирует конструктор с параметрами)

затем с помощью функции Set изменить конструктор с параметрами и вывести опять 3 конструктора, только с учетом внесенных изменений.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.03.2011, 20:20     классы #4
Елки палки. Set убийственный просто...

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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
 const int size=50;
 
  class COUNTRY {
 
  public:
  COUNTRY();
  COUNTRY(char*, char*, float);
  COUNTRY(const COUNTRY&);
  ~COUNTRY();
  char* GetName();
  char* GetForm();
  float GetSq();
  void SetName(char*);
  void SetForm(char*);
  void SetSq(float);
  void Set(char*, char*, float);
  void print();
 
  private:
  char name[size];
  char form[size];
  float sq;
  };
 
 COUNTRY::COUNTRY (char*NAME, char*FORM, float SQ) // konstyktor s paramentrami
 {
 strcpy(name,NAME);
 strcpy(form,FORM);
 sq=SQ;
// Set(name, form, sq);
 }
 
 COUNTRY::COUNTRY () // konstryktor s ymalchivaemimy parametrami
 {
 char NAME[size]="Russia";
 char FORM[size]="Federation Republic";
 double SQ=7887454.47;
 strcpy(name,NAME);
 strcpy(form,FORM);
 sq=SQ;
 }
 
 COUNTRY::COUNTRY (const COUNTRY&c) // konstryktor kopirovaniya
 {
 strcpy(name, c.name);
 strcpy(form, c.form);
 sq=c.sq;
        cout <<"Konstruktor kopirovaniya vizvan dlya: " << endl;
         print();
 }
 
 COUNTRY::~COUNTRY()
 {
        cout <<"Destruktor vizvan dlya: " << name << endl;
        delete []name;
 }
 
 void COUNTRY::print()
 {
        cout <<"Nazvanie strani: " << name << endl;
        cout <<"Forma pravleniya: " << form << endl;
        cout <<"Ploshad: " << sq << endl;
        cout << endl;
 }
 
 void COUNTRY::Set(char*name, char*form, float sq)
  {
  SetName(name);
  SetForm(form);
  SetSq(sq);
 strcpy (COUNTRY::name, name);
 strcpy (COUNTRY::form, form);
 COUNTRY::sq=sq;
  }
 
  void COUNTRY::SetName (char* name)
  {
        cout << "Strana? " << endl;
                cin >> name;
  }
 
  void COUNTRY::SetForm (char* form)
  {
        cout << "Forma pravleniya? " << endl;
                cin >> form;
  }
 
  void COUNTRY::SetSq (float sq)
  {
        cout << "Ploshad? " << endl;
                cin >> sq;
  }
 
  char* COUNTRY::GetName() {return name;}
  char* COUNTRY::GetForm() {return form;}
  float COUNTRY::GetSq() {return sq;}
 
 void main ()
 {
  clrscr();
  COUNTRY a;
        cout << "Konstryktor s ymalchivaemimy paramentramy vizvan dlya:" << endl;
         a.print();
 
        cout << "Konstryktor s paramentramy vizvan dlya: " << endl;
  COUNTRY w("Spain", "Monarchy", 984571.9);
         w.print();
 
  COUNTRY n=w;
  char countr[size];
  strcpy(countr, " ");
  char form[size]; 
  strcpy(form, " ");
  float sq=0.0;
  w.Set(name, form, sq);
  a.print();
  w.print();
  n.print();
  getch();
 }
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
07.03.2011, 20:37  [ТС]     классы #5
спасибо большое, выводит как надо!

а не подскажите еще, что за проблема с площадью ? никак не реагирует на площадь, введенную с клавиатуры ...
выводит что площадь равна 0
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.03.2011, 20:39     классы #6
LAans, Потому что это бред делать ввод в сеттере... В определении класса тоже поменяй, чтобы подавало ссылку.

C++
1
2
3
4
5
  void COUNTRY::SetSq (float& sq)
  {
        cout << "Ploshad? " << endl;
                cin >> sq;
  }
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
07.03.2011, 20:58  [ТС]     классы #7
спасибо!

Добавлено через 9 минут
можно еще вопрос .. если в сетах делать ввод вывод это бред, то что тогда вообще должно находится в сетах (SetName, SetForm ..) ?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.03.2011, 21:02     классы #8
LAans, Ввод делать в сетах бред, вывод тоже.
Должно находится к примеру.

C++
1
2
3
4
void SetName(char* Name)
{
    strcpy(name, Name);
}
Геттер.

C++
1
2
3
4
const char* GetName() const
{
   return name;
}
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
08.03.2011, 21:44  [ТС]     классы #9
подскажите, пожалуйста, почему при вводе площади .. например 1111.7 в результате выдает 1111.699951
как это можно исправить ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2011, 00:55     классы
Еще ссылки по теме:

C++ Классы С++
Классы?! C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.03.2011, 00:55     классы #10
LAans, Использовать double.
Yandex
Объявления
09.03.2011, 00:55     классы
Ответ Создать тему
Опции темы

Текущее время: 12:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru