Вот что я подумал сделать:
A - Structure {
Position
Name
}
B1 - Vehicle {
Fuel
}
B2 - Building {
-nothing-
}
foo - Car
foo2 - Truck
bar - Hospital
bar2 - Market
Невозможно объявить конструкторы, подобные следующим, поскольку A не является прямым базовым классом:
foo(x,y,z):A(x,y,z)
bar(a,b,c):A(a,b,c)
Итак, я попытался сделать это так:
B1():A(){}
B2():A(){}
...
foo(x,y,z):A(x,y,z),B1()
bar(a,b,c):A(a,b,c),B2()
Это работает, но я не уверен, что это правильный способ сделать это, поскольку A строится дважды (или я так думаю). Я не хочу создавать такие же конструкторы (с теми же аргументами), которые будут обтекать конструктор класса A, например:
B1(x,y,z):A(x,y,z){}
...
foo(x,y,z):B1(x,y,z)
Редактировать:
Уточнил это немного больше.
Изначально существовал класс "структура", из которого были получены все фу и бары, и все было в порядке, но в тот момент, когда мне нужно было добавить топливо в транспортные средства, мне пришлось дифференцировать транспортные средства от зданий.
Совершенно очевидно, что Транспортные средства и Здания должны поддерживаться с одинаковым количеством аргументов, но я хочу знать, является ли законным разделение вызовов конструктора (что, кажется, работает - второй последний фрагмент - похоже, делает что, как я уже сказал выше, я не знаю, правильно ли это сделать.).
Я знаю, что мог бы просто сделать множественное наследование для транспортных средств и зданий или просто использовать его экземпляр как свойство foo & bar, но мне интересно, есть ли правильный способ сделать это таким образом.