Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Iworb
анимешник++
93 / 60 / 7
Регистрация: 03.11.2009
Сообщений: 424
#1

Динамическая строка в классе - C++

16.03.2010, 20:43. Просмотров 633. Ответов 7
Метки нет (Все метки)

Знаю, вопрос наверное тупой, но я недавно c++ начал учить. Столкнулся с одной проблемой. Думаю будет лучше, если покажу наглядно.
http://www.cyberforum.ru/cpp-beginners/thread1953537.html
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
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<locale.h>
 
class book
{
    public:
        book() {printf("\n---Объект создан---\n");};
        ~book(){printf("\n---Объект уничтожен---\n");};
        char *name;
        char *autor;
        int pages;
        float price;
        int pereplet;
        int GetSer() const;
        void SetSer(int newser);
    private:
        int ser;
};
 
int main()
{
    setlocale(LC_ALL,"Russian");
    setlocale(LC_ALL,"");
    book *a;
    int bn;
    printf("\nСколько будет книг:");
    scanf("%d",&bn);
    a=new book[bn];
    getch();
    delete[] a;
    return 0;
}
Теперь сам вопрос. Как в main передать значение в объект в параметр name и autor?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2010, 20:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическая строка в классе (C++):

Динамическая строка!
Здравствуйте, что такое динамическая строка, чем она отличается от обычной...

Динамическая строка: класс и конструкторы
Динамическая строка Характеризуется количеством символов в строке. ...

Динамическая строка, класс String
Общая постановка. Пользовательский класс String должен содержать необходимые...

Динамическая строка и перегрузка операций
Ввести с клавиатуры строку символов S1. Признак окончания ввода строки -...

Динамическая строка и перегрузка операций
Всем доброго дня!!!Если есть минутка, помогите сделать эти задания!буду очень...

7
Sekt
157 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 637
16.03.2010, 21:21 #2
C++
1
2
book(char *Name,char *Author):name(Name),author(Author){
}
0
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
16.03.2010, 21:23 #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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream.h>
#include <string.h>
 
class MyClass {
 
char *str;
public:
MyClass(const char *p_str);
virtual ~MyClass();
 
inline long show_str(){
cout<<str;
cout<<'\n';
cout<<'\n';
return 0;
}
};
 
MyClass::MyClass(const char *p_str){
str = new char[strlen(p_str)+1];    //выделение памяти.
strcpy(str,p_str);                  //копирование в буфер, без проверки размера буферов
}
 
MyClass::~MyClass(){
delete []str;                       //освобождение памяти.
}
 
 
int main(){
MyClass obj("Petr");
obj.show_str();
MyClass m_objs[3]={"Ignat","Sergey","Pavel"};
for(int i=0;i<3;i++)m_objs[i].show_str();
 
 
 
return 0;
}
1
Iworb
анимешник++
93 / 60 / 7
Регистрация: 03.11.2009
Сообщений: 424
16.03.2010, 21:27  [ТС] #4
Цитата Сообщение от Sekt Посмотреть сообщение
C++
1
2
book(char *Name,char *Author):name(Name),author(Author){
}
немного не понял...... Напоминает конструктор с параметром, но ведь это вроде не он....
жаль в main нельзя что-то типа
C++
1
gets(*(a+i).name);
Добавлено через 2 минуты
предлагаете в конструкторе передавать указатель на введенную нами строку? А его не нужно в таком случае сразу инициализировать?? Тогда массив объектов должен создаваться вроде в цикле...
0
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
16.03.2010, 22:12 #5
Можно в класс добавить метод копирование переданной строки,
это позволит присваивать строки не только во время создания объекта.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
long copy_to_str(const char *p_str){
delete []str;
str = new char[strlen(p_str)+1];
strcpy(str,p_str);                  //копирование в буфер, без проверки размера буферов
return 0;
}
//Можешь так проверить. на моем примере.
//....
MyClass obj("Petr");
obj.show_str();
obj. copy_to_str("ddddssssss");
//.....
obj.show_str();
//В данном примере надо ещё определить свой конструктор копирования, воизбежание ошибок в 
//будущем
1
Iworb
анимешник++
93 / 60 / 7
Регистрация: 03.11.2009
Сообщений: 424
16.03.2010, 22:15  [ТС] #6
попытался сделать нечто в этом роде.....
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
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<locale.h>
#include<string.h>
 
class book
{
    public:
        book(char *sub_st, char *avtor);
        ~book();
        char *name;
        char *autor;
        int pages;
        float price;
        int pereplet;
        int GetSer() const;
        void SetSer(int newser);
    private:
        int ser;
};
 
book::book(char *sub_st, char *avtor)
{
    printf("\n---Объект создан---\n");
    name=new char[strlen(sub_st)+1];
    autor=new char[strlen(avtor)+1];
    strcpy(name,sub_st);
    strcpy(autor,avtor);
}
 
book::~book()
{
    printf("\n---Объект уничтожен---\n");
    delete[] name;
    delete[] autor;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    setlocale(LC_ALL,"");
    book *a;
    int bn;
    char *temp_name, *temp_autor;
    printf("Сколько будет книг:");
    scanf("%d",&bn);
    for(int i=0;i<bn;i++)
    {
        printf("\nКаково название %d книги:",i+1);
        gets(temp_name);
        printf("\nА кто её автор:");
        gets(temp_autor);
        a[i]=new book(temp_name,temp_autor);
    }
    getch();
    delete[] a;
    return 0;
}
выдает ошибку на 54 строке
0
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
16.03.2010, 22:50 #7
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<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<locale.h>
#include<string.h>
 
 
class book
{
    public:
        book(char *sub_st, char *avtor);
        ~book();
 
        char *name;
        char *autor;
 
        int pages;
        float price;
        int pereplet;
 
        int GetSer() const;
        void SetSer(int newser);
 
 
        private:
        int ser;
};
 
book::book(char *sub_st, char *avtor)
{
    
    name =new char [strlen(sub_st)+1];
    autor=new char [strlen(avtor)+1];
 
    strcpy(name,sub_st);
    strcpy(autor,avtor);
}
 
book::~book()
{
  
    delete[] name;
    delete[] autor;
}
 
int main()
{
     
        book **a;
        int bn;
        char temp_name[255];
        char temp_autor[255];
        scanf("%d",&bn);
 
 
 
a = new book*[bn];  //âûäåëè ГЇГ*ìÿòü ïîä Г¬Г*Г±Г±ГЁГў ГіГЄГ*Г§Г*òåëåé Г±Г*Г*Г·Г*ëî.
 
for(int i=0;i<bn;i++)
    {
 
     printf("input1 "); 
     gets(temp_name);
     printf("input2 ");
     gets(temp_autor);
     
     a[i]=new book(temp_name,temp_autor); 
}
 
for(int k=0;k<bn;k++)delete a[k];
delete[]a;
    
    
    
return 0;
}
Ошибку исправил только у меня gets нормально не работает, может у тебя всё заполнит.
2
Iworb
анимешник++
93 / 60 / 7
Регистрация: 03.11.2009
Сообщений: 424
16.03.2010, 23:19  [ТС] #8
Сделал, поменял gets на scanf пока, но все-равно лево работает - пишу 3 объекта, первый вроде нормально создает, далее - тупо вылетает. Может это и из-за компилятора (wxDev-Cpp), у меня есть Turbo C - но там русский не выводит нормально =(

Добавлено через 5 минут
все, вроде заработало
0
16.03.2010, 23:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2010, 23:19
Привет! Вот еще темы с решениями:

Динамическая строка и перегрузка операций
Общая постановка. Пользовательский класс String должен содержать необходимые...

Динамическая строка или статическая?
В функцию в качестве параметра передаётся указать на строку символов. Можно ли...

Класс динамическая строка и перегрузка операций
Форумчане, привет :) Нужна помощь!:help: Не могу найти, точнее их...

Operator int() в классе Строка
Приведите пример, пожалуйста, как воспользоваться данной перегрузкой операции в...


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

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

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