Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

protected переменные и наследование

8.1K
06 сентября 2006 года
Нео
48 / / 30.07.2006
такая вот проблема.
Приведу упрощенный кусочек программы:

class Element
{
protected:
std::vector<unsigned long> iParameter;
public:
std::vector<Element*> Content;
.....
};

class Cascad: public Element
{
public:
void connect();
...
};

void Cascad::connect()
{
int nx1=Content

->iParameter[0];
}

Компилятор жалуется на то, что нету доступа к protected члену класса.
Оно в принципе и понятно. Но как сделать так, чтобы доступ был, не перенося iParameter в категорию public? Желательно без использования friend, но все предложения выслушаю. Заранее спасибо.

398
06 сентября 2006 года
Alexandoros
630 / / 21.10.2005
Наоборот в принципе не понятно - протектед как раз и служит для этих целей. Ищи ошибку в проге.
3
06 сентября 2006 года
Green
4.8K / / 20.01.2000
Ответ зависит от того, почему ты не хочешь переносить iParameter в public.
Можно сделать geter - метод возвращающий либо значение, либо ссылку на элемент контейнера, либо сам контейнер, все зависит от задачи.
Например:
 
Код:
class Element
{
private:
    std::vector<unsigned long> iParameter;

public:
    unsigned long getParameter(int index) { return iParameter[index]; }
};

Кстати, сам по себе protected - не лучшее решение.
3
06 сентября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=Alexandoros]Наоборот в принципе не понятно - протектед как раз и служит для этих целей. Ищи ошибку в проге.[/QUOTE]
Protected дает возможность доступа к членам родительского класса из данного класса, но не доступ к полям экземпляров родительского класса.
Поэтому пример и не рабочий.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог