언어 자료구조 알고리즘/프로그래밍 실습

[C#] 상속과 다형성 실습 - 밴드(음악가, 피아니스트, 드러머)

언제나휴일 2019. 8. 8. 14:16
반응형

실습) 다음 시나리오에 맞게 프로그램을 작성하시오.

* 목적: 상속과 다형성 기초

밴드를 생성 후에 피아니스트와 드러머를 멤버로 추가한다.
그리고 연주를 준비한다.
그리고 연주를 수행한다.
연주를 준비할 때 멤버 중에 피아니스트는 튜닝을 수행한다.
연주할 때 모든 멤버는 연주한다. 만약 드러머일 때는 폴링도 수행한다.

*2019년도 공주대에서
소스 코드 예) Musician.cs

using System;

 

namespace 상속과_다형성_실습1

{

    class Musician

    {

        string name;

        protected string Name

        {

            get

            {

                return name;

            }

        }

        public Musician(string name)

        {

            this.name = name;

        }

        public void Play()

        {

            Console.WriteLine("{0} 연주하다.", name);

        }

        public override string ToString()

        {

            return name;

        }

    }

}

 

Pianist.cs

using System;

 

namespace 상속과_다형성_실습1

{

    class Pianist:Musician

    {

        public Pianist(string name) : base(name)

        {

        }

        public void Tuning()

        {

            Console.WriteLine("{0} 조율하다.", Name);

        }

    }

}

 

Drummer.cs

using System;

 

namespace 상속과_다형성_실습1

{

    class Drummer:Musician

    {

        public Drummer(string name):base(name)

        {

        }

        public void Polling()

        {

            Console.WriteLine("{0} 휘리릭~", Name);

        }

    }

}

 

 

Band.cs

using System;

namespace 상속과_다형성_실습1
{
    class Band
    {
        Musician[] members = new Musician[2];
        int mcnt;
        public void AddMember(Musician member)
        {
            if(mcnt <members.Length)
            {
                members[mcnt] = member;
                mcnt++;
            }
        }
        public void StartConcert()
        {
            foreach(Musician m in members)
            {
                m.Play();
                Drummer drummer = m as Drummer;
                if(drummer !=null)
                {
                    drummer.Polling();
                }
            }
        }
        public void Ready()
        {
            foreach (Musician m in members)
            {
                Pianist pianist = m as Pianist;
                if(pianist != null)
                {
                    pianist.Tuning();
                }
            }
        }
    }
}

 

Program.cs

using System;

namespace 상속과_다형성_실습1
{
    class Program
    {
        static void Main(string[] args)
        {
            Band band = new Band();
            band.AddMember(new Pianist("송정수"));
            band.AddMember(new Drummer("장언휴"));
            band.Ready();
            band.StartConcert();
        }
    }
}

실행 화면

반응형