Возврат объекта вложенного класса

0

У меня есть два класса, вложенные следующим образом:

class A{
    private:
        class B{

        };
    B *object;
}

теперь я хочу иметь функцию, которая может вернуть этот объект, например:

B& A::get_object(){
    if(object == nullptr)
        object = new B();
    return *object;
}

но он говорит, что B не называет тип в get_object(). Что я сделал не так, как я могу его исправить?

Основная цель, которую я делаю, заключается в том, что я хочу скрыть класс B в том, что не позволяю создавать объект B любым другим способом, чем при вызове A :: get_object(). Может быть, я должен сделать это по-другому?

Заранее спасибо!

  • 0
    Я думаю, что это должно быть полностью квалифицированным. A::B&
Теги:
class

1 ответ

1
Лучший ответ

Попробуйте использовать возвращаемый тип метода как A::B&.

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

Кроме того, по мере того, как вы возвращаете ссылку, вам нужно позаботиться о том, чтобы B* object НИКОГДА недействителен - обычно, устанавливая его в конструкторе и удаляя его только в destuctor, иначе этот метод мог бы вернуть ссылку на null.

Если объект должен проживать до тех пор, пока он является родительским объектом, почему бы не поместить его в стек - либо это, либо метод возвращает B*.

  • 0
    Разве об этом не заботятся в методе get_object ()? Я устанавливаю objec для nullptr в конструкторе и удаляю его в деструкторе. Кроме того, как я должен отключить возможность создания объекта класса B где-нибудь еще? Должен ли я просто явно объявить конструкторы и CC с ключевым словом delete?
  • 0
    Это так, но если вы поместите объект в стек, вам не нужно будет об этом заботиться. Однако, если это дорогостоящий объект, который не всегда может быть создан во время выполнения программы, то создание его только по запросу является допустимым подходом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню