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

Инициализация укзателей в классе - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Генерация чисел. Пуассон. Код не фурычит http://www.cyberforum.ru/cpp-beginners/thread660926.html
Доброго времени суток. Господа, кому несложно покопаться в коде, помогите понять, где тут ошибки? Программа запускается, число выборки ввожу и всё, вылетает. Я в этом деле нуб, так что буду рад...
C++ В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась Ребят, помогите разобраться. Стоит задача создать программу со строками, string.h желательно не использовать. В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась. Вот... http://www.cyberforum.ru/cpp-beginners/thread660908.html
Метод многих поверхностей C++
Подскажите, пожалуйста, где можно почитать о методе "многих поверхностей" (multi-surface method). С его помощью нужно будет построить сетку на области.
Задача на сортировку массива методом вставки на С++ C++
Помогите, пожалуйста, решить задачу. Отсортируйте по возрастанию методом вставки одномерный целочисленный массив, введенный с клавиатуры. Выведите на экран исходный и отсортированный массивы....
C++ Система счисления - выводится лишний ноль http://www.cyberforum.ru/cpp-beginners/thread660867.html
Добрый день! Вопрос мой состоит в следующем: Много видел уже готовых программ по переводу чисел из одной системы в другую,но захотел сделать сова алгоритм. Я использую цикл do/while, считаю лучшим...
C++ что-то не то с функциями! #include <iostream> #include <conio.h> #include <math.h> #include <fstream> #include <iomanip> using namespace std; double n=1; double m=0,x=0,z=0,s=0,a=0,b=0,h=0,q=0,w=0,e=0,zz=0,p=0;... подробнее

Показать сообщение отдельно
moskitos80
61 / 61 / 10
Регистрация: 04.10.2011
Сообщений: 217
Завершенные тесты: 1
30.09.2012, 18:42  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Если указатели обнулили то при вызове оператора delete
ошибки не будет
А... как бы во время работы указатели конечно же будут указывать на какие то данные, приведу полный листинг класса (как у автора, у меня получилось всё тоже самое, но разница была в том, что показывают листинги в начале топика). Класс просто является контейнером, который имеет 4 текстовых поля и методы для установки и получения значений + перегруженные оператор и конструктор копирования, .
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
class Address
{
    public: 
        Address()
        : lastname_     (new char[1])
        , firstname_    (new char[1])
        , phone_        (new char[1])
        , address_      (new char[1])
        {
            this->lastname_[0]  = '\0';
            this->firstname_[0] = '\0';
            this->phone_[0]     = '\0'; 
            this->address_[0]   = '\0';
        }       
        ~Address()
        {
            delete [] this->firstname_;
            delete [] this->lastname_;
            delete [] this->phone_;
            delete [] this->address_;
        }       
        Address(const Address &a)
        : lastname_     (0)
        , firstname_    (0)
        , phone_        (0)
        , address_      (0)
        {
            *this = a;
        }       
        const Address& operator = (const Address &a)
        {
            if (this != &a) {
                this->lastname(a.lastname());
                this->firstname(a.firstname());
                this->phone(a.phone());
                this->address(a.address());
            }
            return *this;
        }
        
        // Чтение lastname
        const char* lastname() const {return this->lastname_;}
        // Запись lastname
        void lastname(const char* s)
        {
            if (this->lastname_ == s) return;
            delete [] this->lastname_;
            this->lastname_ = this->dup(s);
        }
        
        // Чтение firstname
        const char* firstname() const {return this->firstname_;}
        // Запись firstname
        void firstname(const char* s)
        {
            if (this->firstname_ == s) return;
            delete [] this->firstname_;
            this->firstname_ = this->dup(s);
        }
        
        // Чтение phone
        const char* phone() const {return this->phone_;}
        // Запись phone
        void phone(const char* s)
        {
            if (this->phone_ == s) return;
            delete [] this->phone_;
            this->phone_ = this->dup(s);
        }
        
        // Чтение address
        const char* address() const {return this->address_;}
        // Запись address
        void address(const char* s)
        {
            if (this->address_ == s) return;
            delete [] this->address_;
            this->address_ = this->dup(s);
        }
        
    private:
        char *lastname_;
        char *firstname_;
        char *phone_;
        char *address_;
        
        // Глубинное копирование данных указателя:
        char* dup(const char *s)
        {
            char *newstr = new char [std::strlen(s) + 1];
            std::strcpy(newstr, s);
            return newstr;
        }
};
Вот как у меня:
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
class Address
{
    public: 
        Address()
        : lastname_     (NULL)
        , firstname_    (NULL)
        , phone_        (NULL)
        , address_      (NULL)
        { }       
        ~Address()
        {
            delete this->firstname_;
            delete this->lastname_;
            delete this->phone_;
            delete this->address_;
        }       
        Address(const Address &a)
        : lastname_     (NULL)
        , firstname_    (NULL)
        , phone_        (NULL)
        , address_      (NULL)
        {
            *this = a;
        }       
        const Address& operator = (const Address &a)
        {
            if (this != &a) {
                this->lastname(a.lastname());
                this->firstname(a.firstname());
                this->phone(a.phone());
                this->address(a.address());
            }
            return *this;
        }
        
        // Чтение lastname
        const char* lastname() const {return this->lastname_;}
        // Запись lastname
        void lastname(const char* s)
        {
            if (this->lastname_ == s) return;
            delete this->lastname_;
            this->lastname_ = this->dup(s);
        }
        
        // Чтение firstname
        const char* firstname() const {return this->firstname_;}
        // Запись firstname
        void firstname(const char* s)
        {
            if (this->firstname_ == s) return;
            delete this->firstname_;
            this->firstname_ = this->dup(s);
        }
        
        // Чтение phone
        const char* phone() const {return this->phone_;}
        // Запись phone
        void phone(const char* s)
        {
            if (this->phone_ == s) return;
            delete this->phone_;
            this->phone_ = this->dup(s);
        }
        
        // Чтение address
        const char* address() const {return this->address_;}
        // Запись address
        void address(const char* s)
        {
            if (this->address_ == s) return;
            delete this->address_;
            this->address_ = this->dup(s);
        }
        
    private:
        char *lastname_;
        char *firstname_;
        char *phone_;
        char *address_;
        
        // Глубинное копирование данных указателя:
        char* dup(const char *s)
        {
            char *newstr = new char [std::strlen(s) + 1];
            std::strcpy(newstr, s);
            return newstr;
        }
};
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru