2012-05-05 2 views

ответ

6

Как бы компилятор знал, сколько места выделяется для экземпляров класса? Рассматривают

A foo; 
protected int A::var; 
A bar; 

Как бы компилятор знать, чтобы выделить место для var, когда она выделяется foo? Первая и вторая строки могут быть даже в разных единицах перевода.

Итак, нет, это невозможно, потому что это не имеет смысла.

+0

+1 для отличной точки. – greg

6

Простыми словами, Нет, это невозможно.

сложным словом, это невозможно, поскольку стандарт позволяет использовать ключевое слово и спецификатор доступа protected, которые будут использоваться только внутри определения класса.

0

Там нет никакого способа сделать точно то, что вы хотите (как уже говорили другие), но есть «хаки» вокруг этого, если вы просто не хотите, чтобы показать protected/private пользователей для пользователей вашего класса. Вы можете создать класс PrivateBase и PublicBase, а затем третий класс, который использует множественное наследование или состав двух предыдущих классов. Как правило, это делается потому, что вы хотите распространять файл заголовка, но не хотите раскрывать все ваши личные члены.

Here is an example таких. Я считаю, что у Скотта Мейерса есть пример в одной из его книг. Это намного больше работы и делает обслуживание на вашем конце намного сложнее, поэтому имейте это в виду.

Смежные вопросы