}
interface CookieMachine { void get(); }
class ComboMachine : CoffeeMachine, CookieMachine {
// void CoffeeMachine.get() { writeln("coffee was produced"); } // error
// void CookieMachine.get() { writeln("cookie was produced"); } // error
}
в C#: interface CoffeeMachine { void get(); } interface CookieMachine { void get(); } class ComboMachine : CoffeeMachine, CookieMachine { void CoffeeMachine.get() => Console.WriteLine("coffee was produced"); void CookieMachine.get() => Console.WriteLine("cookie was produced"); } public static void Main() { ComboMachine machine = new ComboMachine(); ((CoffeeMachine)machine).get(); // coffee was produced ((CookieMachine)machine).get(); // cookie was produced }
не вот так? interface IMachine { void get(); } class CoffeeMat : IMachine { void get() { "Coffee was produced".writeln; } } class CookieMat : IMachine { void get() { "Cookie was produced".writeln; } } void main() { auto coff = new CoffeeMat; auto cook = new CookieMat; coff.get; cook.get; }
не уверен можно ли в С++ так :D
Какой-то вымученный пример
struct CoffeeMachine { virtual void get() = 0; }; struct CookieMachine { virtual void get() = 0; }; struct ComboMachine : public CoffeeMachine, public CookieMachine { void get() override { std::cout << "Item was produced" << std::endl; } }; int main() { ComboMachine machine; static_cast<CoffeeMachine*>(&machine)->get(); static_cast<CookieMachine*>(&machine)->get(); return 0; }
а ну круто в ди нету множественного наследивания
Первые 2 класса, еквалентны интерфейсам
Ну так это просто плюсовый интерфейс
я би сделал функцию get(T) T либо кофе либо печенье
так тут один и тот же вывод — "Item was produced"
очевидно, если нужно то сделайте реализацию к виртуальной функции и все
тут так и сделано
Обсуждают сегодня