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

Не хватает знаний. Не знаю, как на с++ реализовать возможность - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Цикл с параметром http://www.cyberforum.ru/cpp-beginners/thread384243.html
Ребят,помогите перевести программу на С++: Даны два целый числа А и В (А<B).Найти сумму всех целых чисел от А до В включительно. var A,B:integer; temp:integer; i:integer; begin temp:=0;
C++ посследовательности вводим число пока оно не равно 0. и складываем только положительные четные числа, выводим сумму. с циспользования цикла do {} while(); http://www.cyberforum.ru/cpp-beginners/thread384241.html
C++ Windows forms: обращение к одной форме из другой
Здравствуйте! Помогите пожалуйста: есть главная форма Form1 и форма с логином и паролем Login. Как обратиться из формы Login к элементу из формы Form1? Заранее спасибо.
C++ Определение и реализация класса.
Есть два кода: 1) Объявление класса #include <winioctl.h> #define FILE_DEVICE_WINIO 0x00008010 #define WINIO_IOCTL_INDEX 0x810 #define IOCTL_WINIO_ENABLEDIRECTIO CTL_CODE ( FILE_DEVICE_WINIO, \WINIO_IOCTL_INDEX + 2, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_WINIO_DISABLEDIRECTIO CTL_CODE ( FILE_DEVICE_WINIO, \WINIO_IOCTL_INDEX + 3, METHOD_BUFFERED, FILE_ANY_ACCESS) class CIO32NT
C++ Единицы массы http://www.cyberforum.ru/cpp-beginners/thread384227.html
Ребята, помогите пожалуйста перевести программку с паскаля на С++: Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна, 5 — центнер. Дан номер единицы массы (целое число в диапазоне 1–5) и масса тела в этих единицах (вещественное число). Найти массу тела в килограммах.} Program Case7;
C++ Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик 1)Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. 2)Проверить, все ли строки матрицы содержат хотя бы один положительный элемент. Если да, то изменить знаки... подробнее

Показать сообщение отдельно
Bers
Заблокирован
15.11.2011, 10:31     Не хватает знаний. Не знаю, как на с++ реализовать возможность
Есть одна вещь, которую у меня сделать никак не получается.

В моей старенькой 2008 студии отсутствуют стандартизированные интеллектуальные указатели.
По этой причине я когда то написал собственные велосипеды для разных типов указателей.

Вот так выглядит прототип метода, который загружает данные в сильнвй указатель (который умеет шариться)


C++
1
2
3
4
void Input(TypeT* &Object); //принять право владения объектом. 
                                //Источник - указатель,
                                // который в конце операции обнулится 
                                //(больше не будет владеть объектом)
Обратите внимание, что на входе ссылка на указатель, а не просто указатель.
Это нужно специально для того, что бы можно было обнулить аргумент.

Вот так выглядит реализация метода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void_TSharedPointer::Input(TypeT * &pObject)
{
    if(pObject==NULL_PTR) {   Release(); return;  }
 
    //следующее условие не корректно
    //Потому что , ситуация, 
    //когда аргумент указывает туда же,
    //куда и смартпоинтер возникнуть не может
    //Но покамест закроем на это глаза
 
    if(mp_Pointer != pObject)  
    {  
        Release();  
        mp_Pointer = pObject;
        mp_CounterLink=new int(1);
        pObject=NULL_PTR; 
    }
}
Обнуление аргумента гарантирует интеллектуальному указателю, что он действительно будит являться единственным владельцем объекта. И вызывающая сторона не сможет больше никак в обход его ничего сделать с ввереным ему объектом.

Все это здорово, и прекрасно.

Вот так это работает на практике:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
 
    int* ptr= new int;
 
    TSharedPointer<int> test(ptr);
    //теперь значение ptr равно NULL_PTR
    //объект принадлежит сильному указателю
    //а вызывающая сторона 
    //не имеет к нему прямого доступа
 
    EndProgramm();
}

Проблема в том, что я хочу сохранив инвариант сильного указателя, при этом иметь возможность написать вот так:
C++
1
2
3
4
5
6
7
int main()
{
    TSharedPointer<int> test(new int()  );  
    
  
    EndProgramm();
}
Компилятор мне на это пишет:

error C2664: TSharedPointer<TypeT>::TSharedPointer(TypeT *&): невозможно преобразовать параметр 1 из 'int *' в 'int *&'

Вопрос: как сохранить возможность обнуления входящих указателей, но при этом иметь возможность скармливать интеллектуальному указателю оператор new ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru