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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
TRTHHRTS
0 / 0 / 0
Регистрация: 12.02.2012
Сообщений: 5
#1

Работа с char* в классе - C++

12.02.2012, 13:21. Просмотров 3487. Ответов 8
Метки нет (Все метки)

Приветствую.
Задача: разработать класс, с методами и т.д.
И нужно использовать в качестве поля char*.
Но он какой-то тугой (то есть не он, а я), в итоге виснет, видимо, потому что неправильно инициализирую переменную в main. Каким образом написать, чтобы не висло:
Соответственно, реализация через 3 файла:
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
#include <cstdlib>
#ifndef PERSON_H
#define PERSON_H
using namespace std;
class PERSON
{
 char *name;
 int age;
 bool sex;
 public:
  PERSON();
  PERSON(char*,int,bool);
  PERSON(const PERSON&);
  ~PERSON();
  char *GetName() const;
  int GetAge() const;
  bool GetSex() const;
  void SetName(char*);
  void SetAge(int);
  void SetSex(bool);
  void Set(char*,int,bool);
  int Show(); 
};
#endif
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
#include <cstdlib>
#include <iostream>
#include "person.h"
 
PERSON::PERSON(char *NAME,int AGE,bool SEX){
  strcpy(name,NAME); age=AGE; sex=SEX;
  cout<<"\nConstructor with arguments for "<<this<<endl;};
 
PERSON::PERSON(){
  name="S"; age=25; sex=0;
  cout<<"\nConstructor without arguments for "<<this<<endl;};
 
PERSON::PERSON(const PERSON &per_son){
  strcpy(name,per_son.name);
  age=per_son.age;
  sex=per_son.sex;
  cout<<"\nConstructor of copy for "<<this<<endl;};
 
char* PERSON::GetName() const {cout<<" \nName: "<<name;};
 
int PERSON::GetAge() const {cout<<" \nAge: "<<age;};
 
bool PERSON::GetSex() const {cout<<" \nSex(0 - male; 1 - female): "<<sex;};
 
void PERSON::Set(char *n,int a,bool s){strcpy(name,n); age=a; sex=s;};
 
void PERSON::SetAge(int a){age=a;};
 
void PERSON::SetName(char *c){strcpy(name,c);};
 
void PERSON::SetSex(bool s){sex=s;};
 
int PERSON::Show(){
  cout<<" \nName: "<<name;
  cout<<" \nAge: "<<age;
  cout<<" \nSex (0 - male, 1 - female): "<<sex<<endl;
  return 0;};
  
PERSON::~PERSON(){delete [] name;};
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
#include <cstdlib>
#include <string>
#include <iostream>
#include "person.h"
using namespace std;
 
int main()
{
  char *name;
  int age;
  bool sex;
  cout<<"Input name: "; cin>>name;
  cout<<"Input age: "; cin>>age;
  cout<<"Input sex: "; cin>>sex;
  PERSON a;
  PERSON b;
  PERSON *c;
  a.Show();
/ b.Set(name,age,sex);
  b.Show();
  c->Set("Milady",19,1);
  c->Show();
  system("PAUSE");
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.02.2012, 13:43     Работа с char* в классе #2
Для начала под char* name нужно выделить память, и уж только потом в него что-либо писать.
Pavel.fromBy
13 / 13 / 1
Регистрация: 31.12.2011
Сообщений: 83
12.02.2012, 13:44     Работа с char* в классе #3
Чтобы скопировать строку в name, необходимо выделить память для name!
Пример:
C++
1
2
3
4
5
.....
char *p;
p = new char[20];
strcpy(p, "Hello world!");
...

Не по теме:

Опоздал... Как обычно



А делать вот так:
C++
1
2
PERSON::PERSON(){
  name="S";
ох как неправильно, даже если выделили память под name.
TRTHHRTS
0 / 0 / 0
Регистрация: 12.02.2012
Сообщений: 5
12.02.2012, 13:51  [ТС]     Работа с char* в классе #4
C++
1
2
3
char *name;
  name=new char[20];
  cout<<"Input name: "; cin>>name;
Таким образом с этой строкой все будет в порядке?
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.02.2012, 13:52     Работа с char* в классе #5
Цитата Сообщение от Pavel.fromBy Посмотреть сообщение
Пример:
Код C++
1
2
3
4
5
.....
char *p;
p = new char[20];
strcpy(p, "Hello world!");
...
C
1
char *p = strdup("Hello world");
Pavel.fromBy
13 / 13 / 1
Регистрация: 31.12.2011
Сообщений: 83
12.02.2012, 13:54     Работа с char* в классе #6
Цитата Сообщение от TRTHHRTS Посмотреть сообщение
C++
1
2
3
char *name;
  name=new char[20];
  cout<<"Input name: "; cin>>name;
Таким образом с этой строкой все будет в порядке?
Таким вводом там будет только слово Это я так, к слову
C++
1
2
char *p = new char[20]; // можно сразу выделять
cin.getline(p, 20);
TRTHHRTS
0 / 0 / 0
Регистрация: 12.02.2012
Сообщений: 5
12.02.2012, 14:08  [ТС]     Работа с char* в классе #7
Программа не работает. Вылетает после объявления объектов.
Pavel.fromBy
13 / 13 / 1
Регистрация: 31.12.2011
Сообщений: 83
12.02.2012, 14:26     Работа с char* в классе #8
Посмотри и сам увидишь, где ошибся. Единственное подскажу - в мейне указатель ты не инициализировал ( не выделил под него память / не записал в него адрес объекта ). Оформление - извини, но УЖАС. Сейчас я конечно не выравнивал все, как надо, но поколдовал немного.. Функции типа get() у тебя для вывода использовались, зачем им возвращать значение? Да и не возвращал ты ничего. И, да, про точку запятой после реализации (определения) функции забудь... Ошибкой это не будет, но это лишний оператор.
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
126
127
#include <iostream>
#include <locale>
 
using namespace std;
 
class PERSON
{
private:
    char *name;
    int   age;
    bool  sex;
 
public:
     PERSON();
     PERSON(char *, int,bool);
     PERSON(const PERSON &);
        ~PERSON();
 
    void Show();
    void Set (char *, int, bool); 
 
    void GetName()      const;
    void GetSex ()      const;
    void GetAge ()      const;
 
     void SetName(char *);
     void SetAge (int);
     void SetSex (bool);
};
 
PERSON::PERSON(char *NAME, int AGE, bool SEX)
{
    name = new char[20];
    age  = AGE;
    sex  = SEX;
 
    strcpy(name, NAME); 
 
        cout << "\nConstructor with arguments for "<< this <<endl;
}
 
PERSON::PERSON()
{
    name = new char[2];
    age  = 25;
    sex  = 0;
 
    strcpy(name, "S");
 
        cout << "\nConstructor without arguments for " << this <<endl;
}
 
PERSON::PERSON(const PERSON &per_son)
{
    name = new char[20];
    age  = per_son.age;
    sex  = per_son.sex;
 
        strcpy(name, per_son.name);
    
    cout<<"\nConstructor of copy for " << this << endl;
}
 
void PERSON::GetName() const 
{ cout << " \nName: " << name; }
 
void PERSON::GetAge() const
{ cout << " \nAge: " << age; }
 
void PERSON::GetSex() const 
{ cout << " \nSex(0 - male; 1 - female): " << sex; }
 
void PERSON::Set(char *n, int a, bool s)
{
    delete [] name;
 
    name = new char[20];
    age  = a; 
    sex  = s;
 
    strcpy(name,n);
}
 
void PERSON::SetAge(int a)
{ age = a; }
 
void PERSON::SetName(char *c)
{ strcpy(name, c); }
 
void PERSON::SetSex(bool s)
{ sex = s; }
 
void PERSON::Show()
{
    cout<<" \nName: " << name;
        cout<<" \nAge: " << age;
        cout<<" \nSex (0 - male, 1 - female): " << sex <<endl;
}
  
PERSON::~PERSON()
{ delete [] name; }
 
int main()
{
    char *name = new char[20];
    int   age;
    bool  sex;
 
    cout << "Input name: "; 
    cin  >> name;
    cout << "Input age: "; 
    cin  >> age;
    cout << "Input sex: "; 
    cin  >> sex;
 
    PERSON  b;
    PERSON *c = new PERSON;
 
    b.Set (name, age, sex);
        b.Show();
 
    c->Set ("Milady", 19, 1);
        c->Show();
 
    system("PAUSE");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2012, 14:40     Работа с char* в классе
Еще ссылки по теме:

Работа со строками - Invalid conversion from 'char' to 'const char*' C++
Поиск объекта в классе по строке типа char C++
Работа с приватными полями в классе C++
C++ Работа со статическими и локальными переменными в классе
Инициализация char в классе C++

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

Или воспользуйтесь поиском по форуму:
TRTHHRTS
0 / 0 / 0
Регистрация: 12.02.2012
Сообщений: 5
12.02.2012, 14:40  [ТС]     Работа с char* в классе #9
Спасибо, теперь все отлично.
Замечания учтены.


Pavel.fromBy, форматирование четкое.
Yandex
Объявления
12.02.2012, 14:40     Работа с char* в классе
Ответ Создать тему
Опции темы

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