1

Тема: Як об'єднати два класи

Доброго вечора!
Не знаю як правильно треба було мені створити заголовок =)
Отже, є завдання, яке потребує,  створити класс вагон, який буду складатись з типу вагона та його номера; та реалізувати стек, де будут ці вагони.

Я зробив стек:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

interface IStack {
    Boolean Empty();
    object Pop();
    object Push(object element);
    object Peek();
    void Display();
}

class Stack : IStack {
    int StackSize;
    int top;
    object[] item;

    public int StackSizeProperty {
        get { return StackSize; }
        set { StackSize = value; }
    }

    public Stack() {
        StackSizeProperty = 10;
        item = new object[StackSize];
        top = 0;
    }

    public Stack(int capacity) {
        StackSizeProperty = capacity;
        item = new object[StackSizeProperty];
        top = 0;
    }

    public bool Empty() {
        if (top == 0) {
            return true;
        }
        return false;
    }

    public object Push(object element) {
        if (top == StackSize) {
            Console.WriteLine("Stack is full.");
            return "Stack is full.";
        }
        else {
            item[++top] = element;
            Console.WriteLine("Item was been pushed.");
            return "item was been pushed.";
        }
    }

    public object Pop() {
        if (Empty()) {
            Console.WriteLine("Stack is empty.");
            return "Nothing.";
        }
        else {
            return item[top--];
        }
    }

    public object Peek() {
        if (Empty())
        {
            Console.WriteLine("Stack is empty.");
            return "Nothing.";
        }
        else {
            return item[top];
        }
    }

    public void Display() {
        for (int elements = top; elements > 0; elements--) {
            Console.WriteLine("Item " + elements + ": " + item[elements]);
        }
    }

    public void Exit() {
        do {
        } while (Console.ReadKey().Key != ConsoleKey.Escape);
    }
}

class MainProgram {
    static void Main()
    {
        Stack myStack = new Stack();
        int choice;

        while (true) {
            Console.WriteLine("- -- Stack MENU -- -");
            Console.WriteLine("1. Add an element.");
            Console.WriteLine("2. See the Top element.");
            Console.WriteLine("3. Remove top element.");
            Console.WriteLine("4. Display stack elements.");
            Console.WriteLine("5. Exit(ESC).");
            Console.Write("\n\tSelect your choice: ");
            choice = int.Parse(Console.ReadLine());

            switch (choice)
            {
                case 1:
                    myStack.Push(Console.ReadLine());
                    break;
                case 2:
                    myStack.Peek();
                    break;
                case 3:
                    myStack.Pop();
                    break;
                case 4:
                    myStack.Display();
                    break;
                case 5:
                    myStack.Exit();
                    break;
            }
        }
    }
}

Потім зробив клас вагону:

class Carriage {
    public int SequenceNumber {
        get; protected set;
    }

    public string CarriageType {
        get; protected set;
    }

    public Carriage(int number, string type) {
        this.SequenceNumber = number;
        this.CarriageType = type;
    }
}

class MainProgram
{
    static void Main()
    {
        Console.Write("Enter the sequence numbers: ");
        int seqNumber = int.Parse(Console.ReadLine());
        Console.Write("Enter the type of train: ");
        string type = Console.ReadLine();

        Carriage myCarriage = new Carriage(seqNumber, type);
    }
}

Саме на данному етапі, я не знаю як мені об'єднати вагон з стеком.
Робив так:

class MainProgram
{
    static void Main()
    {
        Stack myStack = new Stack();
        int choice;

        Console.Write("Enter the sequence numbers: ");
        int seqNumber = int.Parse(Console.ReadLine());
        Console.Write("Enter the type of train: ");
        string type = Console.ReadLine();

        Carriage myCarriage = new Carriage(seqNumber, type);

        while (true)
        {
            Console.WriteLine("- -- Stack MENU -- -");
            Console.WriteLine("1. Add an element.");
            Console.WriteLine("2. See the Top element.");
            Console.WriteLine("3. Remove top element.");
            Console.WriteLine("4. Display stack elements.");
            Console.WriteLine("5. Exit(ESC).");
            Console.Write("\n\tSelect your choice: ");
            choice = int.Parse(Console.ReadLine());

            switch (choice)
            {
                case 1:
                    myStack.Push(myCarriage);
                    break;
                case 2:
                    myStack.Peek();
                    break;
                case 3:
                    myStack.Pop();
                    break;
                case 4:
                    myStack.Display();
                    break;
                case 5:
                    myStack.Exit();
                    break;
            }
        }
    }
}

Але, на початку консольної програми, мене програма просить вписати параметри вагону.
Я не знаю як тоді його розмістити, щоб вона викликалась лише коли користувач натиснув 1 - "Add an element."

Буду вдячний за допомогу.

2

Re: Як об'єднати два класи

Вітаю. Вам треба перенести ось це

Console.Write("Enter the sequence numbers: ");
        int seqNumber = int.Parse(Console.ReadLine());
        Console.Write("Enter the type of train: ");
        string type = Console.ReadLine();
 
        Carriage myCarriage = new Carriage(seqNumber, type);

Осюди

case 1:
                    myStack.Push(myCarriage);
                    break;

Між case 1: та myStack.Push(myCarriage)

Говоріть українською! Живіть українською! Відчувайте українською!
Подякували: laketych, leofun012

3

Re: Як об'єднати два класи

FakiNyan написав:

Вітаю. Вам треба перенести ось це

Console.Write("Enter the sequence numbers: ");
        int seqNumber = int.Parse(Console.ReadLine());
        Console.Write("Enter the type of train: ");
        string type = Console.ReadLine();
 
        Carriage myCarriage = new Carriage(seqNumber, type);

Осюди

case 1:
                    myStack.Push(myCarriage);
                    break;

Між case 1: та myStack.Push(myCarriage)

Дякую.
Зараз є маленька проблема - коли ввожу параметри об'єкта при виводі результатів - виводить ім'я классу, бо в класі Carriage не перевизначений метод ToString().

Почитав статті. Цілком нічого не зрозумів що і як робити.

   public override string ToString()
    {
        string resulText = SequenceNumber;
        return resulText;
    }

Пише помилку, що не може перевизначити з int в string.

4

Re: Як об'єднати два класи

ВСЕ, нарешті!
Я розібрався, дякую.

public override string ToString()
    {
        return SequenceNumber.ToString();
    }
Подякували: FakiNyan1

5

Re: Як об'єднати два класи

Завдання швидше   за все було про ООП а не класи.Тому мабуть було треба внаслідувати клас "вагон" від класу "номер".

6

Re: Як об'єднати два класи

cheappi386 написав:

Завдання швидше   за все було про ООП а не класи.Тому мабуть було треба внаслідувати клас "вагон" від класу "номер".

так в цьому немає логіки, вагон міг би наслідуватись від чогось типу "Машина", або "ЗасібПересування", але ж не від номеру

Говоріть українською! Живіть українською! Відчувайте українською!
Подякували: koala, leofun01, /KIT\3

7

Re: Як об'єднати два класи

Вагон по ідеї міг би реалізовувати інтерфейс нумерований

Подякували: FakiNyan, leofun012

8

Re: Як об'єднати два класи

FakiNyan написав:
cheappi386 написав:

Завдання швидше   за все було про ООП а не класи.Тому мабуть було треба внаслідувати клас "вагон" від класу "номер".

так в цьому немає логіки, вагон міг би наслідуватись від чогось типу "Машина", або "ЗасібПересування", але ж не від номеру

в українській освіті взагалі немає ніякої логіки, тому потрібно уточнювати  у викладача

9

Re: Як об'єднати два класи

Класи обєднуються френдінгом. І ставляться в один модуль. З певними модифікаіями переачі ссилки на спарені класи один одному.

(цей допис зроблено ботом. можете не звертати на нього уваги)
(цей підпис зроблено адміном. можете не звертати на нього уваги)