Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
XenoZD

Конструкторы/деструкторы

ДИСКЛЕЙМЕР: если вдруг вы не понимаете о чём речь - вряд ли вам это пригодится когда-либо, просто я дурачок считающий что придумал что-то умное

На сайте богемии вижу фразу "Every class can have one constructor and one destructor". Слова "only" я не вижу. Мне нужна примерно такая конструкция
 

class Foo
{
	private string m_str;
	private int m_num;

	void Foo()
	{
		m_str = "";
		m_num = 0;
	}

	void Foo(string str, int num)
	{
		m_str = str;
		m_num = num;
	}
	
	Foo GetCopy()
	{
		return new Foo(m_str, m_num);
	}
};


Запуск в таком виде + вызове второго конструктора приводит к ошибке TooManyParameters
Запуск БЕЗ конструкторов по умолчанию + вызове конструктора по умолчанию приводит к ошибке NotEnoughParameters

Вопрос - есть ли возможность добавить два конструктора. Если нет, есть ли идеи как это обойти?

Edited by XenoZD (see edit history)

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Мне напомнили о слове "полиморфизм", буду использовать его (это трюк выше с одинаковыми названиями, но разными аргументами функции)
Скорее всего в EnScript полиморфизм не распространяется на конструкторы => код выше не реализовать

Кому это всё-таки может пригодиться:
Вариант 1 - использовать конструктор с параметрами со значениями по умолчанию (если дефолтным оказывается массив - на всякий случай создать пустой экземпляр)
Вариант 2 (костыль) - в местах, где должен был быть конструктор без параметров, создать вручную параметры с дефолтными значениями и запихнуть их в новоявленный объект (если таких мест 1-2, может пригодиться)

Edited by XenoZD
ться (see edit history)

Share this post


Link to post
Share on other sites






  • 0

Собственно вариант

class Foo
{
	private string m_str;
	private int m_num;

	void Foo(string str = "", int num = 0)
	{
		m_str = str;
		m_num = num;
	}
	
	Foo GetCopy()
	{
		return new Foo(m_str, m_num);
	}
};

в теории должен работать как при

Foo MyParameter = new Foo();

так и при

Foo MyParameter = new Foo("text",5);

Не тестил

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.