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

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

Войти
Регистрация
Восстановить пароль
 
L3xx__
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 17
#1

(конструктор) SmartPointer(Temp* p = NULL) - C++

04.08.2014, 01:18. Просмотров 278. Ответов 1
Метки нет (Все метки)

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
#include <iostream>
using namespace std;
class Temp
{
    int TEMP;   
    public:
        //конструктор
        Temp(){TEMP=25;}
        //функция показа на экран
        void TempFunction(){
            cout<<"TEMP = "<<TEMP<<"\n\n";
        } 
        //функция установки значения
        void TempSet(int T){
            TEMP=T;
        }
};
// Класс, реализующий умный указатель
class SmartPointer 
{
    // Инкапсулированный указатель
    Temp*ptr;
    //счётчик копий 
    int count_copy;
 
public:
    //конструктор
    SmartPointer (Temp*p=NULL){
        //записываем 0 при создании копий нет
        count_copy=0;
        ptr=p;
    }
    // конструктор копирования
    SmartPointer (const SmartPointer&obj){
        //создается копия - увеличиваем счётчик
        ptr=obj.ptr;
        count_copy++;       
    }
    //перегрузка оператора равно
    SmartPointer operator=(const SmartPointer&obj){
        //создается копия - увеличиваем счётчик
        ptr=obj.ptr;
        ptr=obj.ptr;
        count_copy++;
        //возвращаем сам объект для ситуации a=b=c
        return *this;
    }
    // уничтожение объекта
    ~SmartPointer(){
        //если объект есть и копий нет
        if(ptr!=NULL&&count_copy==0){
            cout<<"\n~Delete Object\n";
            //уничтожаем объект
            delete[]ptr;
        }
        //в противном случае(уничтожается копия)
        else{
            //уменьшаем счётчик
            count_copy--;
            cout<<"\n~Delete Copy\n";
        }
            
    } 
    //старая добрая перегрузка селектора
    Temp* operator->(){
        return ptr;
    }
 
};
 
void main(){
    //создаем объект
    Temp*main_ptr=new Temp;
    //инициализируем этим объектом умный указатель
    [B]SmartPointer PTR(main_ptr)[/B];
    //проверяем работу умного указателя
    PTR->TempSet(100);
    PTR->TempFunction();
    // создаем копию (работа конструктора копирования)
    SmartPointer PTR2=PTR;
}
 
Результат работы программы:
// работа с объектом через умный указатель
TEMP = 100
//уничтожение копии
~Delete Copy
//уничтожение самого объекта
~Delete Object
Доброго времени суток. Подскажите пожалуйста, почему в аргументах реализации конструктора класса, указатель зануляется? Что происходит с указателем, который передается в конструктор, как аргумент, при создании объекта класса?

Заранее благодарю, за ответы и уделенное внимание.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2014, 01:18     (конструктор) SmartPointer(Temp* p = NULL)
Посмотрите здесь:

Реализовать пользовательский класс "Smartpointer" - C++
Выходит мне нужно убирать один из деструкторов? Как правильно оформить что бы работали оба деструктора? #define _CRT_SECURE_NO_WARNINGS ...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Определить где находится папка TEMP - C++
вот есть пример, как определить папку темп на с# System.IO.Path.GetTempPath() но не могу найти как определить где темп на с++, подскажите.

Временные файлы папки Temp - как избежать ее удаления - C++
Подскажите пожалуйста! Есть программа, после ее обновления папка sql удаляется из временной папки TEMP... Что можно сделать, чтобы эта...

Не работает функция по причине temp'a. Не знаю как исправить - C++
void Mass_Function_Replace(double massive, int n) { double temp; for(int i =0; i &lt; n-1; i++) { if(abs(massive)&gt;1) double temp;...

С++ Сохранение данных при сбое системы, класс BackUp, temp файл - C++
Дорогие программисты, помогите, пожалуйста, советом со следующей задачей (хотя бы направьте в нужное русло или что почитать...

Почему не работает функция std::regex_replace(temp,"amp;",""); - C++
Пробую вызывать функцию std::regex_replace(temp,&quot;amp;&quot;,&quot;&quot;); Пишет ошибку: test_ok_ruDlg.cpp 1&gt;d:\visual studio...

NULL - C++
Почему указатель рекомендуется инициализировать нулем, а не NULL? *p = 0 лучше чем *p = NULL Прочитал в Страуструпе


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
04.08.2014, 01:23     (конструктор) SmartPointer(Temp* p = NULL) #2
это аргумент по умолчания. если вызвать конструктор без аргументов, то этот аргумент и подставится (т.е. нуль), если с аргументов - то в конструктор придет этот аргумент.
Ответ Создать тему
Опции темы

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