Информация об изменениях

Сообщение Re[3]: "Гибкий" конструктор для инициализации объекта класса от 25.08.2023 13:04

Изменено 25.08.2023 13:21 Sm0ke

Re[3]: "Гибкий" конструктор для инициализации объекта класса
Здравствуйте, zelenprog, Вы писали:


S>>Чтож, вычислили параметры, закинули в конструктор / или там в метод init()


Z>А что за метод init()?


Z>Предлагаете делать у каждого класса такой метод?

Z>Напомню: у конструктора нету параметров.

Каждому классу, требующему инициализацию, исходя из параметров
можно сделал метод init(params), раз конструктор без параметров.



Или: Про фабрику вам уже советовали

это Можно сделать так:

class Car ( int wheels, float max_speed )

class Test ( string path, file handle )

// фабрика
class maker ()

maker::new_car(int wheels, float max_speed)
{
  ret = new Car;
  ret.wheels = wheels;
  ret.max_speed = max_speed;
  return ret;
}

maker::new_test(string path)
{
  ret = new Test;
  ret.path = path;
  ret.handle = CreateFile(path);
  return ret;
}


Что тут происходит? Это класс maker, в котором несколько методов для создания целевых объектов. Фабричный метод создаёт, инициализирует и возвращает готовый экземпляр требуемого типа.



кст. В вашем языке можно передать и хранить тип данных как значение?
Re[3]: "Гибкий" конструктор для инициализации объекта класса
Здравствуйте, zelenprog, Вы писали:


S>>Чтож, вычислили параметры, закинули в конструктор / или там в метод init()


Z>А что за метод init()?


Z>Предлагаете делать у каждого класса такой метод?

Z>Напомню: у конструктора нету параметров.

Каждому классу, требующему инициализацию, исходя из параметров
можно сделал метод init(params), раз конструктор без параметров.



Или: Про фабрику вам уже советовали

это Можно сделать так:

class Car ( int wheels, float max_speed )

class Test ( string path, file handle )

// фабрика
class maker ()

maker::new_car(int wheels, float max_speed)
{
  ret = new Car;
  ret.wheels = wheels;
  ret.max_speed = max_speed;
  return ret;
}

maker::new_test(string path)
{
  ret = new Test;
  ret.path = path;
  ret.handle = CreateFile(path);
  return ret;
}


Что тут происходит? Это класс maker, в котором несколько методов для создания целевых объектов. Фабричный метод создаёт, инициализирует и возвращает готовый экземпляр требуемого типа.

Не все языки позволяют выносить методы отдельно за пределы class def
// фабрика
class maker (

  Car new_car(int wheels, float max_speed)
  {
    ret = new Car;
    ret.wheels = wheels;
    ret.max_speed = max_speed;
    return ret;
  }

  Test new_test(string path)
  {
    ret = new Test;
    ret.path = path;
    ret.handle = CreateFile(path);
    return ret;
  }
)




кст. В вашем языке можно передать и хранить тип данных как значение?