Member 13920413 Ответов: 1

Привод класса в виде массива


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

Мой вопрос заключается в следующем : Есть ли способ, которым я получаю Основа класс как Ребенок класс, состоящий из массива Основа и создать ResetAll функция в Ребенок чтобы перебрать все Сброс функции массива?

Или, может быть, создать ResetAll функция которая вызовет все Сброс функции?

Что я уже пробовал:

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

1 Ответов

Рейтинг:
5

OriginalGriff

Нет. C вообще не поддерживает классы, поэтому нет никакого способа создать базовый класс в первую очередь.

Если вы говорите о C++ или C# вместо этого (и если это так, то пометка вашего вопроса соответствующим образом очень помогает), то да, вы можете.

Один из способов, которым я это делаю, состоит в том, чтобы базовый класс содержал статическую коллекцию его экземпляров (здесь код C# ):

public class Base
    {
    private static List<Base> all = new List<Base>();
    private Base()
        {
        all.Add(this);
        }
    public static Base Create()
        {
        return new Base();
        }
    public static Base[] GetAll()
        {
        return all.ToArray();
        }
    }
Было бы легко добавить к этому методы Reset и ResetAll:
public virtual void Reset()
    {
    ...
    }
public static void ResetAll()
    {
    foreach (Base b in all)
        {
        b.Reset();
        }
    }
Вы можете делать подобные вещи в C++.