티스토리 뷰

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

namespace ConsoleApplication3
{

    public class Animal
    {
        protected string Name;  //필드
        private int Level;    //필드

        private int maxLevel = 100 ;
        private int minLevel = 1;

        public void UpLevel()
        {
            if (this.Level < this.maxLevel)
                Level++;
            else
                Console.WriteLine("레벨을 증가할 수 없습니다.");
        }

        public void UpLevel(int Level)
        {
            if (this.Level < this.maxLevel)
                this.Level += Level;
            else
                Console.WriteLine("레벨을 증가할 수 없습니다.");
           
        }

        public string GetName()
        {
            return this.Name;
        }
        public int GetLevel()
        {
            return this.Level;
        }

        public Animal()
        {
        }
        public Animal(int Level)
            : this()
        {
           
            if (Level < this.minLevel)
            {               
                this.Level = this.minLevel;
                Console.WriteLine("올바른 레벨이 입력되지 않아 최소 레벨로 조정하였습니다.");
            }
            else if (Level > this.maxLevel)
            {           
                this.Level = this.maxLevel;
                Console.WriteLine("올바른 레벨이 입력되지 않아 최대 레벨로 조정하였습니다.");
            }
            else
            {
                this.Level = Level;
            }               
        }
        public Animal(int Level, string Name)
            : this(Level)
        {
            this.Name = Name;
        }

        ~Animal()
        {
             
        }

        public virtual void Sound() //override 대상
        {
            Console.WriteLine(Name + ": 소리내다");
        }
    }

    public class Cat : Animal
    {
        public Cat()
        {
        }
        public Cat(int Level) : base(Level)
        {
           
        }
        public Cat(int Level, string Name) : this(Level)
        {
            base.Name = Name;
        }
        public void Meow()
        {
            Console.WriteLine(Name + " : 야옹");
        }
        public override void Sound()
        {
            //base.Sound();
            this.Meow();
        }

    }

    public class Dog : Animal
    {
        public Dog()
        {
        }
        public Dog(int Level) : base(Level)
        {

        }
        public Dog(int Level, string Name) : this(Level)
        {
            base.Name = Name;
           
        }
        public void Bark()
        {
            Console.WriteLine(Name + ": 멍멍");
        }
        public override void Sound()
        {
            //base.Sound();
            this.Bark();
        }
    }
    /*

    public class Dog
    {
        private string Name;  //필드
        private int Level;    //필드
       
        public void UpLevel()
        {
            Level++;
        }
        public string GetName()
        {
            return this.Name;
        }
        public int GetLevel()
        {
            return this.Level;
        }

        public Dog()
        {           
        }       
        public Dog(int Level) : this()
        {           
            this.Level = Level;
        }
        public Dog(int Level, string Name) : this(Level)
        {
            this.Name = Name;           
        }

        ~Dog()
        {
        }
    }


    public class Cat
    {
        //데이터 - 필드, 프로퍼티, 이벤트 ....
        //public String Name;  //필드
        //public int Level;    //필드

        //접근한정자 public 제거
        //접근한정자 private이 됨.
        private string Name;  //필드
        private int Level;    //필드

        //메소드
        public void UpLevel()
        {
            Level++;
        }

        //private인 Name,Level을 뽑아내기 위한 메소드
        public string GetName()
        {
            return this.Name;
        }
        public int GetLevel()
        {
            return this.Level;
        }

        // 모든 클래스에는 하나 이상의 생성자(특수메소드)
        // 아래는 기본 생성자- 기본 생성자는
        // 선언하지 않으면 컴파일러가 알아서 넣어줌.
        // 즉, 모든 클래스에는 적어도 하나 이상의 생성자
        //     존재
        public Cat()
        {
            Console.WriteLine("생성자 Cat()");
        }
        // * 생성자는 오버로딩이 가능합니다. (완전중요)
        //   메소드 오버로딩은 뭘로 결정하지요?
        //   매개변수 갯수, 형식(타입)
        public Cat(int Level) : this()
        {
            //this는 메소드가 소속된 클래스를 가리킴.
            this.Level = Level;
            //Level = this.Level; (x)
            //Level = lvl; (o) 매개변수를 lvl선언

            Console.WriteLine("생성자 Cat(int Level)");
        }
       
        public Cat(int Level, string Name)
        {
            this.Level = Level;
            this.Name  = Name;
        }
        아래처럼 this를 이용해도 됩니다.
       
        public Cat(int Level, string Name) : this(Level)
        {           
            this.Name = Name;
            Console.WriteLine("생성자 Cat(int Level, string Name)");
        }

 

        // 모든 클래스에는 "하나"의 소멸자(특수메소드)
        // 오버로딩 불가 x
        // 호출을 코드로 할 수 없음(즉, 프로그래머가 할 수 없음)
        // 누가호출 : GC (Garbage collector)
        ~Cat()
        {
        }
    }
     * */
    public class Zoo2
    {
        public Animal[] animals = new Animal[10];
        Random rand = new Random();

        public Zoo2()
        {
            for (int i = 0; i < animals.Length; i++)
            {
                //int r = rand.Next(2);  // 2=maxValue
                                      // 0 ~ (maxValue-1)
                if (0 == rand.Next(2))
                {
                    animals[i] = new Dog(1, "견" + i);
                }
                else
                {
                    animals[i] = new Cat(1, "묘" + i);
                }
            }
        }
    }

    public class Zoo
    {
        public Dog[] dogs;
        public Cat[] cats;

        public Zoo()
        {
            dogs = new Dog[5];
            cats = new Cat[5];

            for (int i = 0; i < dogs.Length; i++)
            {
                dogs[i] = new Dog(1, "견" + i);
                cats[i] = new Cat(1, "묘" + i);
            }
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Cat kitty = new Cat(); // int a = 100;
            // 1) Cat 타입의 kitty를 하나 선언
            // 2) new 연산자로 Heap공간 확보
            //    Cat()이라는 Cat 클래스의 생성자 호출
            //    생성자를 호출해야 해당 객체가 만들어짐.
            // 3) 생성된 Cat 객체의 reference값을
            //     kitty에 대입
            // * 이제부터 kitty를 통해서 생성된 Cat에 접근

            //kitty.Name = "키티";
            //kitty.Level = 1;

            // .(dot)연산자를 통해 kitty가 참조하고 있는
            // Cat의 객체에 접근 할 수 있음.
            //kitty.UpLevel();
            //kitty.UpLevel();

            //kitty네 놈의 레벨이 알고 싶구나
            //int lvl = kitty.Level;
            //Console.WriteLine(kitty.GetName()  + "의 레벨 " + kitty.GetLevel());

            //Cat nero = new Cat(5);
            //nero.Name = "네로";
            //nero.UpLevel();
            //nero.Level = 1;
            //Console.WriteLine(nero.GetName() + "의 레벨 " + nero.GetLevel());

            Cat navi = new Cat(-2, "나비");
            navi.UpLevel();
            Console.WriteLine(navi.GetName()
                  + "의 레벨 " + navi.GetLevel());


            Cat nero = new Cat(13, "네로");
            nero.UpLevel(7);
            Console.WriteLine(nero.GetName()
                  + "의 레벨 " + nero.GetLevel());

            Dog dog = new Dog(103, "개");
            dog.UpLevel();
            dog.UpLevel(3);
            Console.WriteLine(dog.GetName()
                  + "의 레벨 " + dog.GetLevel());

            nero.Meow();
            dog.Bark();

            Zoo zoo = new Zoo();

 

            foreach (Cat c in zoo.cats)
            {
                Console.WriteLine(c.GetName() + "/"
                    + c.GetLevel());
                c.Meow();
            }
            foreach (Dog c in zoo.dogs)
            {
                Console.WriteLine(c.GetName() + "/"
                    + c.GetLevel());
                c.Bark();

            }

            Zoo2 zoo2 = new Zoo2();
            foreach (Animal a in zoo2.animals)
            {
                Console.WriteLine(a.GetName() + "/"
                    + a.GetLevel());
                a.Sound();

                /*
                if (a is Dog)
                {
                    Dog dog3 = (Dog)a;
                    dog3.Bark();
                }

                Cat cat = a as Cat;
                if (cat != null)
                    cat.Meow();

                */
            }

 

        }
    }
}

'IT Skills > Programming' 카테고리의 다른 글

JAVA 전쟁 프로젝트  (0) 2013.05.06
C# -- 동물농장  (0) 2013.04.29
C# - 시험참고자료#`  (0) 2013.04.22
java 계산기  (0) 2013.04.15
C#-수강신청  (0) 2013.04.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함