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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
omenufa
1 / 1 / 0
Регистрация: 23.09.2010
Сообщений: 20
#1

Определить пользовательский класс. - C++

25.04.2011, 16:33. Просмотров 2729. Ответов 6
Метки нет (Все метки)

Доброго времени суток, зашел в тупик в лабораторной) вот задание:

Определить пользовательский класс СТРАНА, имеющий: название страны(char *), форму правления (char *) и площадь (float). Определить в классе конструкторы по умолчанию, с параметрами и копирования; деструктор; функции-элементы печати и установки данных элементов. Предусмотреть защиту от неправильного ввода данных. Написать демонстрационную программу, в которой создаются и разрушаются объекты пользовательского класса и каждый вызов конструктора и деструктора сопровождается выдачей соответствующего сообщения(какой объект был вызван и каким конструктором или дестркутором).

Наработанное:
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
#include "stdafx.h"
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <iostream>
#include "CTPAHA.h"
using namespace std;
 
CTPAHA::CTPAHA(){
    square=1700000;
    name=new char[255];
    strcpy(name,"Россия");
    form=new char[255];
    strcpy(form,"Федерация");
    printf("Имя: %s \n",name);
    printf("Форма правления: %s \n",form);
    printf("Площадь: %d \n",square);
    printf("Конструктор был вызван без параметров\n");
    printf("--------------------------------------\n");}
 
 
CTPAHA::CTPAHA(char* n, char* f, double s){
    name=new char[strlen(n)+1];
    strcpy(name,n);
    form=new char[strlen(f)+1];
    strcpy(form,f);
    square=s;
    printf("Имя: %s \n",name);
    printf("Форма правления: %s \n",form);
    printf("Площадь: %i \n",square);
    printf("Конструктор был вызван с параметрами\n");
    printf("--------------------------------------\n");}
 
CTPAHA::CTPAHA(CTPAHA &c){
    name=new char[strlen(c.name)+1];
    strcpy(name,c.name);
    form=new char[strlen(c.form)+1];
    strcpy(form,c.form);
    square=c.square;
    printf("Имя: %s \n",name);
    printf("Форма правления: %s \n",form);
    printf("Площадь: %i \n",square);
    printf("Объект был создан с помощью конструктора копирования\n");
    printf("--------------------------------------\n");}
 
void CTPAHA::Show(void){
    printf("Имя: %s \n",name);
    printf("Форма правления: %s \n",form);
    printf("Площадь: %i \n",square);
    printf("--------------------------------------\n");
}
CTPAHA::~CTPAHA(){
    delete [] name;
    delete [] form;
    printf("Вызван деструктор - данные уничтожены\n");
}
void main(){
    setlocale(LC_ALL,"rus_rus.1251");
    char *Name,*Form; double Square;
    CTPAHA C1;
    CTPAHA C2;
    C1.Show();
    C2.Show();
    cout<<"Введите название страны: "<<endl;
    cin>>Name;
    cout<<"Введите форму правления: "<<endl;
    cin>>Form;
    cout<<"Введите площадь: "<<endl;
    cin>>Square;
    CTPAHA C3(Name,Form,Square);
    C3.Show();
    _getch();
    return;
}
Определение класса:

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
using std::cout;
using std::endl;
 
#ifndef CTPAHA_H
#define CTPAHA_H
 
const int LNAME=255;
 
class CTPAHA{
    char *name;
    char *form;
    double square;
public:
    CTPAHA();
    CTPAHA(char*,char*,double);
    CTPAHA(CTPAHA &c);
    void Show();
    ~CTPAHA();
    void Set(char *n,char *f, double s)//установка полей данных
                {
                         name=n;
                         form=f;
                         square=s;
               }
    
};
#endif
Собственно вот в чем загвоздка: как ввести с клавиатуры сами объекты (название страны, форму и площадь) ? И почему то площадь выводится в консоли нулём, вроде спецификаторы формата все правильные, зашел в тупик, прошу помощи. Заранее спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2011, 16:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить пользовательский класс. (C++):

Определить в программе пользовательский класс - C++
Доброго времени суток, прошу вашей помощи, ибо больше негде, деньгами тоже не богат. И так к заданию: Определить в программе...

Пользовательский класс - C++
Не могу переделать программу под данное условие: вот код: #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;iostream&gt; ...

Queue и пользовательский класс - C++
Недавно начал изучать STL, хотел поработать с queue. Можно ли очередь с типом, который я создал сам? Например class Simple { int a; ...

Реализовать пользовательский класс комплексных чисел - C++
Помогите пожалуйста сделать задание - программу вычисления комплексного числа. Есть рабочая, которая считает формулу:...

Сделать пользовательский класс QueueWithPriority шаблонным классом - C++
программа работает с определенным типом данных, сказали сделать чтобы можно было работать с любым, а я не совсем понимаю как расставить...

Пользовательский класс Queue: как изменить порядок вывода элементов? - C++
Привет всем такой вопрос возник перешел к изучению конструктора и деструктора вопрос заключаеться в том как сделать так чтоб указынные...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
25.04.2011, 23:43
  #2

Не по теме:

omenufa, ЗА такое УБИВАЮТ. Что за CTPAHA блин?!

5
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
26.04.2011, 02:52 #3
1) Коль скоро ты вводишь страну и форму с помощью cin, то, наверное, правильно было бы их объявить как:
C++
1
        string Name,Form; double Square;
Быть может, cin умеет работать и c char* я щас не смотрел но, по крайней мере, ты должен тогда уже под Name и Form выделять память, чего ты не делаешь.

2)Далее, соответственно исправил вот так:
C++
1
         CTPAHA C3((char*)Name.c_str(),(char*)Form.c_str(),Square);
3) Поисправляй везде формат вывода площади
C++
1
 ("%f", square);

Наконец, совет. В функции Set я бы всё-таки воспользовался функцией strcpy потому, что ты НЕ КОПИРУЕШЬ строки, ты просто присваиваешь указателям name и form ДРУГОЕ значение. А смысл? В конструкторе под имя и форму у тебя выделяется достаточно памяти, так используй её на полную катушку. Тем более, может потом ты name будешь менять, так может не получиться.
C++
1
strcpy (name, 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
#include <windows.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <iostream>
#include "CTPAHA.h"
using namespace std;
 
CTPAHA::CTPAHA(){
        square=1700000;
        name=new char[255];
        strcpy(name,"Россия");
        form=new char[255];
        strcpy(form,"Федерация");
        printf("Имя: %s \n",name);
        printf("Форма правления: %s \n",form);
        printf("Площадь: %f \n",square);
        printf("Конструктор был вызван без параметров\n");
        printf("--------------------------------------\n");}
 
 
CTPAHA::CTPAHA(char* n, char* f, double s){
        name=new char[strlen(n)+1];
        strcpy(name,n);
        form=new char[strlen(f)+1];
        strcpy(form,f);
        square=s;
        printf("Имя: %s \n",name);
        printf("Форма правления: %s \n",form);
        printf("Площадь: %f \n",square);
        printf("Конструктор был вызван с параметрами\n");
        printf("--------------------------------------\n");}
 
CTPAHA::CTPAHA(CTPAHA &c){
        name=new char[strlen(c.name)+1];
        strcpy(name,c.name);
        form=new char[strlen(c.form)+1];
        strcpy(form,c.form);
        square=c.square;
        printf("Имя: %s \n",name);
        printf("Форма правления: %s \n",form);
        printf("Площадь: %f \n",square);
        printf("Объект был создан с помощью конструктора копирования\n");
        printf("--------------------------------------\n");}
 
void CTPAHA::Show(void){
        printf("Имя: %s \n",name);
        printf("Форма правления: %s \n",form);
        printf("Площадь: %f \n",square);
        printf("--------------------------------------\n");
}
CTPAHA::~CTPAHA(){
        delete [] name;
        delete [] form;
        printf("Вызван деструктор - данные уничтожены\n");
}
int main(){
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
        setlocale(LC_ALL,"rus_rus.1251");
        string Name,Form; double Square;
        CTPAHA C1;
        CTPAHA C2;
        C1.Show();
        C2.Show();
        cout<<"Введите название страны: "<<endl;
        cin>>Name;
        cout<<"Введите форму правления: "<<endl;
        cin>>Form;
        cout<<"Введите площадь: "<<endl;
        cin>>Square;
        CTPAHA C3((char*)Name.c_str(),(char*)Form.c_str(),Square);
        C3.Show();
        _getch();
        return 0;
}
1
omenufa
1 / 1 / 0
Регистрация: 23.09.2010
Сообщений: 20
26.04.2011, 10:40  [ТС] #4
Цитата Сообщение от ForEveR Посмотреть сообщение

Не по теме:

omenufa, ЗА такое УБИВАЮТ. Что за CTPAHA блин?!

Не по теме:

ну блин препод просит именно так)) Country ему не нравится видите ли))

0
ForEveR
26.04.2011, 12:08
  #5

Не по теме:

omenufa, ЧТОООО?!? Препод просит?! Принесите ему самурайский меч. Пусть сделает себе харакири, если ему нравится CTPAHA........

1
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
26.04.2011, 14:45 #6
а чем плох класс CTPAHA?
0
ForEveR
27.04.2011, 00:03     Определить пользовательский класс.
  #7

Не по теме:

kravam, Да тем, что С/С++ не предназначен для русского. И если он не предназначен, то на кой писать транслитом? Уже лучше нормально русским, но тогда дорога в 1С.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2011, 00:03
Привет! Вот еще темы с ответами:

Пользовательский класс Library: почему не выводятся значения полей класса? - C++
я создала класс Библиотека (название – char* автор – char* стоимость – float) У меня не выводит название, автора и стоимость. В чём моя...

Реализовать произвольный пользовательский класс с функциями-членами Put и Show - C++
Создать несколько обьектов. Написать функции: 1) для ввода данных по обьекту(как Put) 2) для распечатки информации об обьекте (как...

Перегрузить оператор вывода, чтобы заданный пользовательский класс выводился в файл произвольным образом - C++
Добрый вечер. Помогите, пожалуйста. Есть класс class chelovek { private: string name; string pol; string vozrast; string...

Реализовать пользовательский класс Matrix (найти причины возникновения ошибок в коде и исправить эти ошибки) - C++
Доброго времени суток,задание написать класс Matrix,все вроде бы понятно,но почему-то моя матрица инициализируется мусором,не знаю почему,и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.04.2011, 00:03
Ответ Создать тему
Опции темы

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