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

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

Войти
Регистрация
Восстановить пароль
 
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
#1

Конструктор и деструктор в классе - C++

23.07.2012, 11:26. Просмотров 901. Ответов 13
Метки нет (Все метки)

Решил разобраться в конструкторах и деструкторах. Написал, вроде по такой же структуре как и в учебнике. А комп выдает ошибки в компиляции, связанные с типом главной функции.
Что не так, подскажите...

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
#include <iostream>
#include <cstring>
using namespace std;
 
class String
{
    private:
        char *str;
    public:
        String (char *s) // конструктор
        {
            int length = strlen (s);
            str = new char [length + 1];
            strcpy ( str, s);
        }
        ~String () // деструктор
        {
            cout<< "Delete string\n";
            delete [] str;
        }
        void display ()
        {
            cout<< str<< endl;
        }
}
 
int main() // насчет этой строки все ошибки
{
    String mas = "This is a new mass of words";
    cout << "mas = "; mas.display();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 11:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор и деструктор в классе (C++):

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор, деструктор - C++
Дорогие друзья, программисты. Помогите пожалуйста разобраться с конструктором и деструктором, а так же перегрузкой. Фотография прилагается...

Конструктор и деструктор - C++
Всем привет! В программе не работает конструктор с параметрами! Можете подсказать чего я не так делаю? Задание: есть класс изделия,...

Конструктор и деструктор - C++
Нужно чтобы деструктор отработал до завершения программы #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstring&gt; #include...

Конструктор и деструктор - C++
Помогите к этой программе написать Конструктор и деструктор класса #include &lt;iostream&gt; using namespace std; class card { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 11:29 #2
После класса поставь точку с запятой
C++
1
2
3
4
class String
{
...
};
1
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
23.07.2012, 11:31 #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
#include <iostream>
#include <cstring>
using namespace std;
 
class String
{
    private:
        char *str;
    public:
        String (const char *s)  // <--- вот тут const
        {
            int length = strlen (s);
            str = new char [length + 1];
            strcpy ( str, s);
        }
        ~String ()
        {
            cout<< "Delete string\n";
            delete [] str;
        }
        void display ()
        {
            cout<< str<< endl;
        }
};  // <--- вот тут ;
 
int main()
{
    String mas = "This is a new mass of words";
    cout << "mas = "; mas.display();
    return 0;
}
А теперь сделай следующий шаг: разработай правильный конструктор копирования и оператор =.
1
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
23.07.2012, 11:32 #4
Цитата Сообщение от Алексaндр Посмотреть сообщение
}

int main()
C++
1
2
3
};
 
int main()
1
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
23.07.2012, 11:37  [ТС] #5
Да... Точно... В книге её нет (

Добавлено через 4 минуты
CheshireCat, всмысле "правильный конструктор копирования" ? Ты про ссылку на константу ?
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
23.07.2012, 11:41 #6
Алексaндр, если самому не сделать конструктор копирования, будет работать конструктор копирования по умолчанию. В данном случае он совершенно не подходит, т.к. использует побитовое копирование данных. После копирования данных через default copy конструктор, строка другого объекта данного класса будет ссылаться на ту же область памяти, что и строка первого объекта. В результате освобождения памяти произойдет утечка.

C++
1
2
3
4
5
String(const String &obj)
{
    str = new char [strlen(obj.str) + 1];
    strcpy(str, obj.str);
}
1
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
23.07.2012, 12:26  [ТС] #7
Dekio, тогда ошибку выбивает "conversion from `const char[28]' to non-scalar type `String' requested"

Не может char в String вбить ?
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
23.07.2012, 12:31 #8
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
#include <iostream>
#include <cstring>
using namespace std;
 
class String
{
    private:
        char *str;
    public:
        String (const char *s)
        {
            int length = strlen (s);
            str = new char [length + 1];
            strcpy ( str, s);
        }
        String(const String &obj)
        {
            str = new char [strlen(obj.str) + 1];
            strcpy(str, obj.str);
        }
        ~String ()
        {
            cout<< "Delete string\n";
            delete [] str;
        }
        void display ()
        {
            cout<<str<<endl;
        }
        //допишем функцию для вывода адреса строки
        void showAdr()
        {
           cout<<&str<<endl;
        }
}; 
 
int main()
{
    String mas = "This is a new mass of words";
    cout << "mas = "; mas.display();
    String newStr = mas;
    mas.showAdr();
    newStr.showAdr();
    return 0;
}
http://liveworkspace.org/code/f34036...e5488a035efd5e
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.07.2012, 13:32 #9
Насколько мне известно, это потому, что :
C++
1
2
3
4
5
6
7
8
9
10
11
String (const char *s)
        {
            int length = strlen (s);
            str = new char [length + 1];
            strcpy ( str, s);
        }
        String(const String &obj)
        {
            str = new char [strlen(obj.str) + 1];
            strcpy(str, obj.str);
        }
Данная конструкция приводит твою строку "..." к типу String, а затем передает уже ссылку на неё в конструктор копирования (здесь оно второй по счету)
1
Jupiter
23.07.2012, 13:37
  #10

Не по теме:

Цитата Сообщение от nexen Посмотреть сообщение
int length = strlen (s);
Алексaндр, nexen, strlen возвращает не int и не стоит этим пренебрегать!

0
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
23.07.2012, 15:34  [ТС] #11
Jupiter, не int ??? Мы в лицее всегда в int её вбивали. А чтo она возвращает ?
0
Jupiter
23.07.2012, 15:37
  #12

Не по теме:

Цитата Сообщение от Алексaндр Посмотреть сообщение
А чт она возвращает ?
это не ко мне, это к документации


0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.07.2012, 16:31 #13
Цитата Сообщение от Jupiter Посмотреть сообщение

Не по теме:


это не ко мне, это к документации

Не по теме:

Какой сайт более информативный? cplusplus или cppreference? Сам пользуюсь первым, но, как мне сказали, на втором информация "по-слаще"

0
Dekio
23.07.2012, 16:34     Конструктор и деструктор в классе
  #14

Не по теме:

nexen, глупый вопрос. Какая разница какой сайт? Информация почти одинакова. Если есть конкретный вопрос, вбиваем в любой из них (хоть в 2 сразу) и смотрим

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 16:34
Привет! Вот еще темы с ответами:

конструктор и деструктор - C++
Почему деструктор не вызывается? #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; class myclass{ float a; ...

С++. Конструктор, деструктор - C++
Ребята!!! Помогите пожалуйста, не знаю как сделать это задание на С++. Нужно разработать класс Point для работы с пользовательским...

Конструктор и деструктор - C++
На сколько сильно они нужны и можно ли обойтись без них? Что будет если их не описывать? Что такое утечки памяти? Память забивается...

Конструктор/деструктор - C++
Подскажите пожалуйста как внедрить в вот эту программу конструктор и деструктор... В программе есть базовый класс (летательные аппараты)...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.07.2012, 16:34
Ответ Создать тему
Опции темы

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