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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
omenufa
1 / 1 / 0
Регистрация: 23.09.2010
Сообщений: 20
25.04.2011, 16:33     Определить пользовательский класс. #1
Доброго времени суток, зашел в тупик в лабораторной) вот задание:

Определить пользовательский класс СТРАНА, имеющий: название страны(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
Собственно вот в чем загвоздка: как ввести с клавиатуры сами объекты (название страны, форму и площадь) ? И почему то площадь выводится в консоли нулём, вроде спецификаторы формата все правильные, зашел в тупик, прошу помощи. Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2011, 16:33     Определить пользовательский класс.
Посмотрите здесь:

Определить класс «СОБАКА» C++
C++ Определить класс-строку
Наследование: Определить класс vector2 как вектор на плоскости. Определить для него операции и функции C++
C++ Создать класс Triad (тройка чисел) - определить методы; определить производный класс Date - переопределить методы
C++ Определить класс химический элемент, содержащий информацию о названии элемента его химических свойствах. Определить класс медикаменты, содержащий разн
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
25.04.2011, 23:43
  #2

Не по теме:

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

kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
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;
}
omenufa
1 / 1 / 0
Регистрация: 23.09.2010
Сообщений: 20
26.04.2011, 10:40  [ТС]     Определить пользовательский класс. #4
Цитата Сообщение от ForEveR Посмотреть сообщение

Не по теме:

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

Не по теме:

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

ForEveR
26.04.2011, 12:08
  #5

Не по теме:

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

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

Не по теме:

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

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

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