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

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

Войти
Регистрация
Восстановить пароль
 
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
#1

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

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

Знаю, вопрос наверное тупой, но я недавно c++ начал учить. Столкнулся с одной проблемой. Думаю будет лучше, если покажу наглядно.
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++):

Динамическая память в классе - C++
Не знаю как в поле класса выделять память. #pragma once namespace program { class Diysni4usla { private: ...

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

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

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

Динамическая строка: класс и конструкторы - C++
Динамическая строка Характеризуется количеством символов в строке. Поддерживает методы: • чтение и запись символа на заданной...

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

7
Sekt
156 / 155 / 10
Регистрация: 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
1236 / 774 / 44
Регистрация: 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 / 2
Регистрация: 03.11.2009
Сообщений: 413
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
1236 / 774 / 44
Регистрация: 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 / 2
Регистрация: 03.11.2009
Сообщений: 413
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
1236 / 774 / 44
Регистрация: 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 / 2
Регистрация: 03.11.2009
Сообщений: 413
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
Привет! Вот еще темы с ответами:

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

Operator int() в классе Строка - C++
Приведите пример, пожалуйста, как воспользоваться данной перегрузкой операции в main. String.h class String { private: ...

Уточнение о геттере в классе Строка - C++
Подскажите, пожалуйста, как правильно должен быть реализован такой геттер ? class String { private: char* str; int length; ...

В классе Строка перегрузить оператор () для приема целочисленных и дробных значений - C++
всем привет, помогите пожалуйста с кодом на перегрузку оператора как перегрузить () - этим строку в число int и double


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

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

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