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

Виртуальный замок - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ваше профессиональное мнение http://www.cyberforum.ru/cpp/thread752437.html
Здравствуйте! Очень нужно ваше профессиональное мнение и опыт, а ещё лучше преподавательский опыт. Хочу основательно подготовиться к экзамену. Экзамен по системному программному обеспечению....
C++ Шифрование и обфускация принимается за вирус? Дело вот в чем. Есть программа, при проверке которой онлайн антивирус и антивирус на компе утверждают, что скачивание не безопасно. Но сам создатель говорит, что антивирусники тупят, потому что он... http://www.cyberforum.ru/cpp/thread752256.html
C++ Выбор языка программирования
Здравствуйте! Вопрос не в тему. Просто не знал в какой раздел написать. Необходимо создать программу для создания и расчета смет. Подскажите пожалуйста какой язык программирования более всего...
C++ Тема для магистерской работы
Всем привет. Можете помочь выбрать тему для магистерской работы. Если можно что нибуть связанное с C++. Заранее спасибо.
C++ Распределенное программирование на С++ http://www.cyberforum.ru/cpp/thread742174.html
Всем привет. Хочу создать библиотеку как STL, но для распределенных систем (магистерская работа). Нужно сделать нечто, что до меня не было сделано. В инете не нашел оканчателной работы по этой теме....
C++ Алгоритм шифрования DES (необходимо ускорить любым доступным способом) Есть алгоритм шифрования дес, он работает но работает медленно ну или скажем так ... недостаточно быстро для того чтобы препод его принял. Посоветуйте как можно ускорить его в каком-либо месте. Часть... подробнее

Показать сообщение отдельно
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528

Виртуальный замок - C++

14.01.2013, 13:35. Просмотров 1164. Ответов 5
Метки (Все метки)

Доброе утро!
Возникла такая проблема. Допустим, я хочу запретить наследоваться от своего класса другим классам и получить ошибку компиляции(но не пряча при этом конструктор и деструктор в приватную секцию, и не используя С++11).
Для этого я пишу виртуальный замок (virtual lock)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Lock
{
    friend class Foo;
    Lock() { }
    Lock(const Lock&) { }
};
 
class Foo: virtual private Lock
{
 
};
 
class Bar: public Foo
{
 
};
 
int main()
{
    Foo foo;
    Bar bar;
    return 0;
}
http://liveworkspace.org/code/4iyvka$0
Как видим все нормально. Точнее код не скомпилировался, все как мы хотели.

Но вот я немного переделал этот код
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
class Lock
{
public:
    //friend class Foo;
    Lock() { }
    Lock(const Lock&) { }
};
 
class Foo: virtual private Lock
{
 
};
 
class Bar: public Foo
{
 
};
 
int main()
{
    Foo foo;
    Bar bar;
    return 0;
}
http://liveworkspace.org/code/3GKSYm$0
И он почему-то скомпилировался.

В чем принципиальное различие в этих двух кодах? Подскажите, пожалуйста, что я упускаю...

Добавлено через 5 минут
Т.е. в моем втором примере по прежнему конструктор Lock доступен только Foo.
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
class Lock
{
public:
    //friend class Foo;
    Lock() { }
    Lock(const Lock&) { }
};
 
class Foo: virtual private Lock
{
 
};
 
class Bar: public Foo
{
public:
   Bar()
      :  
      //Lock(),
      Foo()
   {
      
   }
 
};
 
int main()
{
    Foo foo;
    Bar bar;
    return 0;
}
Если раскоментировать вызов конструктора Lock из Bar, то получим ошибку. http://liveworkspace.org/code/4l9OVk$0
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru