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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Writefile() & String - В контроллер приходит не то, что было отправлено http://www.cyberforum.ru/cpp-beginners/thread1238071.html
Почему отправляю в com порт "Device?\n" а в котроллер приходит "ppDevice?\n" ???? void Com::Send_package(String str) { char *ptr=str.c_str(), c; uint8_t write_len=0; unsigned long cap; while(c!='\n') { c=*ptr++; write_len++; } if(!WriteFile(COMport, str.c_str(), write_len, &cap, NULL))error=10;
C++ Что означает двоеточие в наследовании конструктора? При изучении ООП в рамках языка c++ столкнулся с интересной формой обьявления конструктора объекта: classname(int A, int B, int C) : a(A), b(B), c(C) { } С инициализации полей класса более менее понятно(соответствует int a(A) и т.д). Но откуда взялось двоеточие? Вопрос в следующем. Используется где еще либо в языке приведенная выше(или похожая) синтаксическая констуркция? http://www.cyberforum.ru/cpp-beginners/thread1238056.html
C++ Как можно было бы избавиться от вызова cin.Get() в каждой функции, работающей с потоком
Вообщем вот код: main: #include "iostream" #include "map" #include "vector" #include "string" #include "algorithm"
C++ Считывание строки в массив цифр
Как считать строку в массив чисел? Покажите работающий пример, который бы компиллировался в http://ideone.com/?
C++ Поиск подстроки между заданными символами http://www.cyberforum.ru/cpp-beginners/thread1238005.html
Написал код на C++, он ищет символы между символами введёнными в Edit и ".txt" . Всё вроде бы работает,но он ищет символы всего лишь один раз... Наверное всё легко и просто (да и код простой), однако найти ошибку я не могу... В чём проблема почему не ищет второй раз? char slova; int d=0; AnsiString log0=Edit1->Text; // Введённое в Edit1 == "bnv243.txt bnv355.txt" char*...
C++ Вывести на экран круг или квадрат (по выбору пользователя) Добрый день ! Помогите написать код,чтобы выводился на экрарн круг или квадрат(по выбору пользователя) по идеи нужно реализовать сами фигуры через массив квадрат 6 строк,10 стобцов а круг 7 строк,10 столбцов ума не приложу с чего собственно говоря начать помогите кто чем может) я знаю можно сделать через канвас но еще не учили эти структуры заранее спасибо подробнее

Показать сообщение отдельно
L3xx__
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 17

(конструктор) 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
Доброго времени суток. Подскажите пожалуйста, почему в аргументах реализации конструктора класса, указатель зануляется? Что происходит с указателем, который передается в конструктор, как аргумент, при создании объекта класса?

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