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

Нужно изменить class human под изменение строк/переменных в ходе использования

24.11.2015, 23:45. Просмотров 1114. Ответов 17


Здравствуйте, дорогие форумчане. У меня есть готовый код класса human, но вот только нужно его изменить таким образом, чтобы данные вводить и считывать, а не работать с готовыми, и в этом проблема, помощь в решение которой я и прошу.
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
#include <stdio.h>
#include <cstdlib>
#include <cstring>
 
class human
{
    char *_surname;
    char *_name;
    int _age;
    int _weight;
 
public:
    human(const char *surname, const char *name, int age, int weight)
    {
        _surname = new char[strlen(surname)+1];
        strcpy(_surname, surname);
        _name = new char [strlen(name)+1];
        strcpy(_name, name);
        _age = age;
        _weight = weight;
    }
    ~human (){
        delete _surname;
        delete _name;
        }
    void show()
    {
        printf("\nInfo:\nSurname : %s\nName : %s\nAge : %d\nWeight: : %d\n", this->_surname, this->_name, this->_age, this->_weight);
    }
};
 
int main()
{
    human Human("Petrov", "Vasya", 27, 86);
    Human.show();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2015, 23:45
Ответы с готовыми решениями:

Не могу вывести значения строк/переменных из класса human
Здравствуйте, дорогие форумчане. Я работаю над кодом класса human, но дошел до момента, когда...

Class Human
Здравствуйте, начал изучать ООП. Столкнулся с такой проблемой. Не могу вызвать в Main &quot;SeyHello&quot;....

Найти ошибку в Class Human
Найдите ошибку: Class Human{ int Age; string Name; public: Human() {} }

Нужно реализовать обмен данными переменных между C# и PHP без использования сервера
Понимаете, тут такое дело... Вообщем пишу что-то типа браузера, сам браузер написан ещё 150 тысяч...

17
87 / 82 / 21
Регистрация: 08.08.2012
Сообщений: 737
24.11.2015, 23:59 2
Лучший ответ Сообщение было отмечено bobiko как решение

Решение

bobiko, добавьте конструктор по умолчанию и методы set/get например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void human::setAge(int age)
{
    _age = age;
}
int human::getAge()
{
    return _age;
}
 
int main()
{
    human Human;
    human.setAge(10);
    std::cout << human.getAge();
}
2
2540 / 1199 / 358
Регистрация: 30.11.2013
Сообщений: 3,820
25.11.2015, 00:01 3
Хулиган, int human::getAge() const
1
87 / 82 / 21
Регистрация: 08.08.2012
Сообщений: 737
25.11.2015, 00:04 4
rikimaru2013,

Не по теме:

точно, :good:

0
31 / 28 / 18
Регистрация: 13.01.2014
Сообщений: 63
25.11.2015, 00:08 5
Как я понял вопрос ты хочешь вместо известных данных
C++
1
human Human("Petrov", "Vasya", 27, 86);
вводить их вручную или считывать откуда-то?
0
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 59
25.11.2015, 00:10  [ТС] 6
Да, вводить вручную. Сейчас пробую реализовать первый совет.

Добавлено через 12 секунд
VaDiG, Да, вводить вручную. Сейчас пробую реализовать первый совет.
0
31 / 28 / 18
Регистрация: 13.01.2014
Сообщений: 63
25.11.2015, 00:12 7
Лучший ответ Сообщение было отмечено bobiko как решение

Решение

как вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    char name[50], surname[50];
    int age, weight;
    cout << "Enter name: ";
    cin >> name;
    cout << "Enter surname:";
    cin >> name;
    cout << "Enter age:";
    cin >> age;
    cout << "Enter weight:";
    cin >> weight;
    human Human(surname, name, age, weight);
    Human.show();
    return 0;
}
1
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 59
25.11.2015, 00:14  [ТС] 8
VaDiG, да, вариант хороший, но класс обязателен
0
31 / 28 / 18
Регистрация: 13.01.2014
Сообщений: 63
25.11.2015, 00:14 9
ну класс и останется

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
#include <stdio.h>
#include <cstdlib>
#include <cstring>
 
class human
{
    char *_surname;
    char *_name;
    int _age;
    int _weight;
 
public:
    human(const char *surname, const char *name, int age, int weight)
    {
        _surname = new char[strlen(surname)+1];
        strcpy(_surname, surname);
        _name = new char [strlen(name)+1];
        strcpy(_name, name);
        _age = age;
        _weight = weight;
    }
    ~human (){
        delete _surname;
        delete _name;
        }
    void show()
    {
        printf("\nInfo:\nSurname : %s\nName : %s\nAge : %d\nWeight: : %d\n", this->_surname, this->_name, this->_age, this->_weight);
    }
};
 
int main()
{
    char name[50], surname[50];
    int age, weight;
    cout << "Enter name: ";
    cin >> name;
    cout << "Enter surname:";
    cin >> surname;
    cout << "Enter age:";
    cin >> age;
    cout << "Enter weight:";
    cin >> weight;
    human Human(surname, name, age, weight);
    Human.show();
    return 0;
}
0
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 59
25.11.2015, 00:28  [ТС] 10
VaDiG, но тогда разве есть смысл в той записи кода в строках 13-30? Не пойму этот момент
0
87 / 82 / 21
Регистрация: 08.08.2012
Сообщений: 737
25.11.2015, 00:31 11
bobiko, если не хочешь создавать объект для каждого человека просто создай 4 массива с нужными тебе типами данных
0
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 59
25.11.2015, 00:48  [ТС] 12
Хулиган, дело как раз в том, что хочу, вот только моя основная проблема в том, что я не до конца понял алгоритм работы строк в классе этом
0
87 / 82 / 21
Регистрация: 08.08.2012
Сообщений: 737
25.11.2015, 00:56 13
Цитата Сообщение от bobiko Посмотреть сообщение
что я не до конца понял алгоритм работы строк в классе этом
нужно при изменении строки проверять выделена уже память для этой строки:
1)да - отчистить выделить заново или проверить хватит ли ранее выделенной памяти записать новое имя, если нет то см. п.2
2)нет - выделить память

зная что имя не будет превышать определенный размер можно поле класса организовать в виде обычного массива.
например
C++
1
char _name[20];
что бы не париться с char* используй std::string
1
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 59
25.11.2015, 01:07  [ТС] 14
Хулиган, а в чем string будет легче в использовании?
0
2540 / 1199 / 358
Регистрация: 30.11.2013
Сообщений: 3,820
25.11.2015, 01:24 15
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
#include <iostream>
#include <string>
using namespace std;
 
class Human
{
    std::string m_surname;
    std::string m_name;
    int m_age;
    int m_weight;
 
public:
    Human() : Human("", "", -1, -1)
    {
 
    }
    Human(const std::string& surname, const std::string& name, const int age, const int weight) :
        m_surname(surname)
        , m_name(name)
        , m_age(age)
        , m_weight(weight)
    {
        
    }
    // ------------------------------------------------- 
    friend ostream& operator<<(ostream&, const Human&);
    friend istream& operator>>(istream&, Human&);   
};
 
ostream& operator<<(ostream& cout, const Human& obj)
{
    cout << "- surname: " << obj.m_surname << endl;
    cout << "- name: " << obj.m_name << endl;
    cout << "- age: " << obj.m_age << endl;
    cout << "- weight: " << obj.m_weight << endl;
    return cout;
}
 
istream& operator>>(istream& cin, Human& obj)
{
    cin >> obj.m_surname >> obj.m_name >> obj.m_age >> obj.m_weight;
    return cin;
}
 
int main()
{
    Human person;
    cout << "Enter surname, name, age, weight: " << endl;
    cin >> person;
 
    cout << endl;
    cout << "Your person: " << endl;
    cout << person;
    return 0;
}
1
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 59
25.11.2015, 01:29  [ТС] 16
rikimaru2013, Хох, спасибо конечно, но изучать язык я начал недавно, поэтому мне слишком много еще не понятно, а разбираться все нужно по порядку ведь)
0
2540 / 1199 / 358
Регистрация: 30.11.2013
Сообщений: 3,820
25.11.2015, 01:38 17
Цитата Сообщение от Хулиган Посмотреть сообщение
что бы не париться с char* используй std::string
Цитата Сообщение от bobiko Посмотреть сообщение
а в чем string будет легче в использовании?
ну надо хорошенько разобраться с работой с char* - ведь std::string это класс написанный, который скрывает реализацию с char*. Тоесть любой программист сможет повторить реализацию std::string - а потом переносить эту реализацию от проекта к проекту.

Так было в С языке. В С++ разработчики языка прислушались к просьбам умолявших и ввели такой класс.

Поэтому научитесь работать с char*, а когда надоест писать одно и тоже - привыкайте к std::string
1
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 59
25.11.2015, 01:42  [ТС] 18
rikimaru2013, В таком случае мне нужно прочувствовать это самому, но потом вникну этому совету)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2015, 01:42

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

Класс Human: изменить в коде пол человека с int на bool
Привет! Вот такой код, класс Human, пол человека сделан через int, нужно переделать что было через...

Нужно "сократить" программу (Написать без использования переменных)
Нужно написать эту программу не используя циклов: Кто ответит, буду ОЧЕНЬ признателен) program...


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

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

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