2015-12-03 4 views
-1

Я знаю, что, как правило, это невозможно, но мне было интересно, есть ли там какой-либо код, чтобы позволить мне иметь функцию в суперклассическом доступе к члену sub класс. Существует четыре подкласса, каждый из которых имеет переменную размера int, а для функции мне нужна переменная размера. Я поговорил с учителем о том, как каким-то образом использовал код друга, но она сказала, что это не сработает.Может ли функция суперкласса получить доступ к элементу данных подкласса

+0

Почему член не в суперклассе? –

+0

Поскольку значение члена изменяется в зависимости от того, какой подкласс он находится в – Aidan

ответ

2

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

0

Вот какие функции виртуального члены являются для:

struct Base { 
    virtual std::string child_name() = 0; 
}; 

struct Derived1 { 
    virtual std::string child_name { return "Derived1"; } 
}; 

struct Derived2 { 
    virtual std::string child_name { return "Derived2"; } 
}; 

Пожалуйста, обратите внимание, что если вы укажете = 0 в базовом классе ваш базовый класс станет «чисто виртуальным» и не инстанциируемый, так что если вы не Не нужно этого поведения, вам нужно будет определить реализацию по умолчанию, которая будет использоваться также, если производный класс не определяет виртуальную функцию.

ВАЖНО: Виртуальные функции не должны вызываться в конструкторе, иначе вы получите исключение (если функция является чистой виртуальной) или нежелательное поведение (по умолчанию будет вызываться реализация по умолчанию).

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