Я хочу заставить детей базового класса иметь частные конструкторы. Затем я хочу, чтобы эти конструкторы вызывались через класс друзей, который является фабричным классом. Это мой шаблон использования:Как принудительно использовать частные конструкторы в дочерних элементах базового класса
У меня есть базовый класс:
class Base:
virtual double method1();
Child
Я хочу, чтобы наследовать Base:
class Child::Base :
public:
Child(string s) {
//do something
}
double method1() {
return field1;
}
private:
double field1;
}
Дети Base
будет создан путем анализа string
. Поэтому у меня мог бы быть конструктор Base
, который принимает string
. Но я не могу сделать конструкторы виртуальными и, следовательно, не применять параметры.
Таким образом, в целях обеспечения того, чтобы дети Base
могут быть созданы только от входа string
, я хочу детей Base
быть обработан из класса фабрики. Моя проблема заключается в том, что ничто не мешает кому-то создавать экземпляр Child
отдельно. Поэтому я хочу, чтобы конструкторы детей из Base
были частными, а затем у вас был класс фабрики как класс друга.
Любые идеи? Даже комментарии к этому проекту приветствуются.
PS: Чтобы получить от строки до экземпляра Child
, будет отличаться для каждого ребенка.
я не получил корень вашего вопроса ясно, что если вы говорите: «Я хочу, чтобы дети базы, чтобы всегда FIELD1» почему бы не просто двигаться field1 в базовый класс тогда? –
изменил вопрос. Я пытался абстрагировать вопрос на простой пример, но, очевидно, я потерпел неудачу. –
Вы можете пометить конструктор по умолчанию для Base private, поэтому конструктор Child будет вынужден вызывать тот, который у вас есть со строкой в качестве параметра, или получить ошибку «нет подходящего конструктора по умолчанию (C2512)» –