С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
#1

Запреты - C++

25.02.2010, 04:30. Просмотров 752. Ответов 7
Метки нет (Все метки)

1. Можно ли запретить:
1.1. Создание локальных экземпляров класса,
1.2. Создание динамических экземпляров класса?
2. Если можно, то как запретить:
2.1. Создание локальных экземпляров класса,
2.2. Создание динамических экземпляров класса?
Требуется что-то такое написать, после чего
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
 #define n ... // некая целая константа
class a { ...}; // Некий класса,
a obj1; // можно
a *pobj1=&obj1; // можно
a *pobj2=new a; // нельзя
a *pobj3; // можно,
a *pobj4; // можно,
a *pobj5; // можно,
a *pobj6=new a[n]; // нельзя
pobj3=obj1; //можно
pobj4=new a; // нельзя
pobj5=new a[n]; // нельзя
void func () // некая функция
{
 a obj2; // нельзя
 a *pobj1=&obj1; // можно
 a *pobj2=new a; // нельзя
 a *pobj3; // можно,
 a *pobj4; // можно,
 a *pobj5; // можно,
 a *pobj6=new a[n]; // нельзя
 pobj3=obj1; //можно
 pobj4=new a; // нельзя
 pobj5=new a[n]; // нельзя
}
.
Что именно требуется написать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2010, 04:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запреты (C++):

Запреты - Системный софт
Ребят задача такая. На предприятии постоянно пользуются торрентами (сеть Windows) какой программулькой можно запретить юзерам пользоваться...

запреты psr - PHP
есть ли какой-то тайный смысл в запрете использования коротких открывающих тегов и размещения нескольких классов в одном файле?

Соединить запреты обработки - JavaScript
Здравствуйте, <input type="number" name="input_kol" min="1" max="99" id="kol" value="1" style="width: 60px ; " onkeyup="return...

Как вставлять запреты на сайты - Visual Basic .NET
как ставить запреты в браузерах на посещении сайтов

Можно ли средствами Python обойти запреты провайдера на вКонтакте? - Python
Добрый день! Наверное все уже знают, что в Украине заблокировали вход на вКонтакте, Одноклассники, Яндекс, Маил.ру. Можно ли написать...

Как настроить запреты для юзера на установку программ и на изменение системных настроек? - Windows 10
Есть Вин10Про (лицензия) с офф сайта Майкрософт. Как настроить запрет для юзверЯ (не админ) на установку программ и изменение системных...

Запреты - Системный софт
Ребят задача такая. На предприятии постоянно пользуются торрентами (сеть Windows) какой программулькой можно запретить юзерам пользоваться...

запреты psr - PHP
есть ли какой-то тайный смысл в запрете использования коротких открывающих тегов и размещения нескольких классов в одном файле?

Соединить запреты обработки - JavaScript
Здравствуйте, <input type="number" name="input_kol" min="1" max="99" id="kol" value="1" style="width: 60px ; " onkeyup="return...

Как вставлять запреты на сайты - Visual Basic .NET
как ставить запреты в браузерах на посещении сайтов

Можно ли средствами Python обойти запреты провайдера на вКонтакте? - Python
Добрый день! Наверное все уже знают, что в Украине заблокировали вход на вКонтакте, Одноклассники, Яндекс, Маил.ру. Можно ли написать...

Как настроить запреты для юзера на установку программ и на изменение системных настроек? - Windows 10
Есть Вин10Про (лицензия) с офф сайта Майкрософт. Как настроить запрет для юзверЯ (не админ) на установку программ и изменение системных...

Запреты - Системный софт
Ребят задача такая. На предприятии постоянно пользуются торрентами (сеть Windows) какой программулькой можно запретить юзерам пользоваться...

запреты psr - PHP
есть ли какой-то тайный смысл в запрете использования коротких открывающих тегов и размещения нескольких классов в одном файле?

Соединить запреты обработки - JavaScript
Здравствуйте, <input type="number" name="input_kol" min="1" max="99" id="kol" value="1" style="width: 60px ; " onkeyup="return...

Запреты - Системный софт
Ребят задача такая. На предприятии постоянно пользуются торрентами (сеть Windows) какой программулькой можно запретить юзерам пользоваться...

запреты psr - PHP
есть ли какой-то тайный смысл в запрете использования коротких открывающих тегов и размещения нескольких классов в одном файле?

Соединить запреты обработки - JavaScript
Здравствуйте, <input type="number" name="input_kol" min="1" max="99" id="kol" value="1" style="width: 60px ; " onkeyup="return...

Как вставлять запреты на сайты - Visual Basic .NET
как ставить запреты в браузерах на посещении сайтов

Можно ли средствами Python обойти запреты провайдера на вКонтакте? - Python
Добрый день! Наверное все уже знают, что в Украине заблокировали вход на вКонтакте, Одноклассники, Яндекс, Маил.ру. Можно ли написать...

Как настроить запреты для юзера на установку программ и на изменение системных настроек? - Windows 10
Есть Вин10Про (лицензия) с офф сайта Майкрософт. Как настроить запрет для юзверЯ (не админ) на установку программ и изменение системных...


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

Или воспользуйтесь поиском по форуму:
7
vladimir bragin
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 3
25.02.2010, 16:13 #2
Тарас Саныч, я точно не пойму, что ты хотел сказать, но статические объекты создаются в стеке не зависимо от того, объявляются ли они в теле функции или в глобальных переменных, поэтому запретить создание таких объектов в теле функции и разрешить в глобальных переменных нельзя.

Добавлено через 7 минут
Тарас Саныч, я точно не пойму, что ты хотел сказать, но статические объекты создаются в стеке не зависимо от того, объявляются ли они в теле функции или в глобальных переменных, поэтому запретить создание таких объектов в теле функции и разрешить в глобальных переменных нельзя.

Добавлено через 2 минуты
Тарас Саныч, я точно не пойму, что ты хотел сказать, но статические объекты создаются в стеке не зависимо от того, объявляются ли они в теле функции или в глобальных переменных, поэтому запретить создание таких объектов в теле функции и разрешить в глобальных переменных нельзя.
1
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
25.02.2010, 16:27 #3
1. Можно ли запретить:
1.1. Создание локальных экземпляров класса,
Можно. Достаточно объявить закрытым или защищенным деструктор этого класса. Учти, что при этом статические и автоматические объекты не будут создаваться (точнее, соответствующий код просто не скомпилируется). Единственным способом останется использование производящих и разрушающих функций.
1.2. Создание динамических экземпляров класса?
Можно. Точно так же - закрыть/защитить operator new/delete (в соответствуюущих формах) для этого класса.
0
vladimir bragin
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 3
25.02.2010, 17:10 #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
#include <stdio.h>
#include <cstring>
 
static const char * const publicname = "Class identifier";
 
class a
{
public:
    a(const char *);
    const char * name();
private:
    ~a();
    char * _className;
    static void * operator new(size_t) { return NULL; }
    static void operator delete(void *) {}
    // Следующие операторы можно и не закрывать, так как нет конструктора без параметров
    static void * operator new[](size_t) { return NULL; }
    static void operator delete[](void *) {}
 
    static a _instance;
 
public:
    static a * globalInstance();
};
 
a a::_instance(publicname);
 
a::a(const char *name)
{
    _className = new char[strlen(name)];
    strcpy(_className, name);
}
 
a::~a()
{
    delete _className;
}
 
a * a::globalInstance()
{
    return &_instance;
}
 
const char * a::name()
{
    return _className;
}
 
int main()
{
    a *anObject = a::globalInstance();
    printf("a single instance: %s", anObject->name()); // Работает. Выходит то, что и ожидаем.
 
    /* Следующие код не компилируется, как и ожидается.
    a obj2;
    a *pobj2=new a;
    pobj4=new a;
    */
    return 0;
}
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
26.02.2010, 04:35  [ТС] #5
Цитата Сообщение от CheshireCat Посмотреть сообщение
Достаточно объявить закрытым или защищенным деструктор этого класса.
. Не подходит. А если я сделаю конструкторы только с параметрами, это поможет? И можно сделать необъявленными
C++
1
...operator =...
,
C++
1
...operator +...
,
C++
1
...operator -...
,
C++
1
...operator >...
,
C++
1
...operator <...
,
C++
1
...operator >=...
,
C++
1
...operator <=...
,
C++
1
...operator +=...
,
C++
1
...operator -=...
,
C++
1
...operator *=...
,
C++
1
...operator /=...
,
C++
1
...operator ++...
,
C++
1
...operator --...
,
C++
1
a(a& x);
,
C++
1
...operator new ...
,
C++
1
...operator delete ...
? То есть чтоб компил за меня ничего из этого не создавал?
Цитата Сообщение от vladimir bragin Посмотреть сообщение
a::globalInstance();
Это статик?
Цитата Сообщение от vladimir bragin Посмотреть сообщение
Следующие код не компилируется, как и ожидается.
C++
1
a obj2;
. Это тоже не обязательно компилить. В том, что я сейчас пишу это компилиться не должно в первую очередь. А это должно:
C++
1
2
3
4
a obj1("ёклмн");
a obj2(obj1, 308, 44, "ёпрст");
a obj3(obj1, 432.34, 231.4, "что попало");
a obj4(obj2, 453, 0.5432 "any text");
, а
C++
1
2
a obj1("ёклмн");
a obj2(obj1, "ёпрст");
не должно. Как сделать?
0
vladimir bragin
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 3
28.02.2010, 20:20 #6
Пардон, в моём коде две ошибки:
вместо
C++
1
_className = new char[strlen(name)];
надо
C++
1
_className = new char[strlen(name) + 1];
и вместо
C++
1
delete _className;
надо
C++
1
delete [] _className;
и также поправки к комментариям:
C++
1
2
3
4
5
6
    /* Следующие код не компилируется, как и ожидается.
    a obj2("Some object");
    a *pobj2=new a("Another object");
    a *pobj4;
    pobj4=new a("Addition another object");
    */
В остальном, Тарас, я твой вопрос относительно последних замечаний не понимаю, так как в одном случае ты допускаешь компиляцию
C++
1
a obj1("ёклмн");
и тут же далее нет.
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
01.03.2010, 06:03  [ТС] #7
Вторая строка компилиться не должна.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.03.2010, 14:42 #8
taras atavin, почитай Мейерс. 35 советов. правило 27
0
01.03.2010, 14:42
Ответ Создать тему
Опции темы

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