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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Генерация чисел. Пуассон. Код не фурычит http://www.cyberforum.ru/cpp-beginners/thread660926.html
Доброго времени суток. Господа, кому несложно покопаться в коде, помогите понять, где тут ошибки? Программа запускается, число выборки ввожу и всё, вылетает. Я в этом деле нуб, так что буду рад самой жесткой критике. Само задание выглядит примерно так: Генерац-я псевдо чисел. Неуниверсальный метод. Пуассоновское распределение, где М=2. входная характеристика программы: объем выборки...
C++ В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась Ребят, помогите разобраться. Стоит задача создать программу со строками, string.h желательно не использовать. В заданной строке удалить заданную подстроку, сколько бы раз она не встречалась. Вот мой код: #include <iostream> #include <stdio.h> #include <string.h> #include "stdafx.h" #include <conio.h> http://www.cyberforum.ru/cpp-beginners/thread660908.html
Метод многих поверхностей C++
Подскажите, пожалуйста, где можно почитать о методе "многих поверхностей" (multi-surface method). С его помощью нужно будет построить сетку на области.
Задача на сортировку массива методом вставки на С++ C++
Помогите, пожалуйста, решить задачу. Отсортируйте по возрастанию методом вставки одномерный целочисленный массив, введенный с клавиатуры. Выведите на экран исходный и отсортированный массивы. (Сортировка вставками: пусть первые k элементов массива уже упорядочены по неубыванию. Берется (k+1)-й элемент и размещается среди первых k элементов так, чтобы упорядоченными оказались уже k+1 первых...
C++ Система счисления - выводится лишний ноль http://www.cyberforum.ru/cpp-beginners/thread660867.html
Добрый день! Вопрос мой состоит в следующем: Много видел уже готовых программ по переводу чисел из одной системы в другую,но захотел сделать сова алгоритм. Я использую цикл do/while, считаю лучшим вариантом(если не так поправьте, пожалуйста) Вот что получилось: a - вводимое число; b - остаток от деления; cin >> a; a = a/2; b = a%2;
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; ifstream in; ofstream out; подробнее

Показать сообщение отдельно
moskitos80
 Аватар для moskitos80
39 / 39 / 0
Регистрация: 04.10.2011
Сообщений: 128
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;
        }
};
 
Текущее время: 15:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru