C#

C# 상속

하이브 Hive 2021. 7. 23. 16:07
반응형

Car.cs

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

namespace ParkingManagement
{
    class Car //설계도
    {
        public string PlateNumber { get; } //private라는 접근제한자를 가지고 있음 -> 공개해야함 / 멤버변수 plateNumber 만듦
        public bool IsSUV { get; } //get만 가능, 읽기전용 속성 set은 허락해주는 것
        public DateTime InTime { get; } //몇시에 들어와서 언제 나갔나 멤버변수에 포함
        public DateTime OutTime;

        public int Duration; // 주차시간(분) - 정수형 변수 / 멤버변수 추가 interger형으로 멤버변수 추가
        public int PartCharge; // 주차요금(원)
        private int age;
        public int Age //접근제한자만 public 소문자 age와 대문자 Age를 엮어놓기만 하면 됨 

        {
            get { return age; } //대문자 Age가 외부에서 진짜 나이를 알고 싶을 때 소문자 age를 들고가라
            set
            {
                age = (value > 0) ? value : age;
                //외부에서 알려준 값이 음수라면 오류로 설정을 할 수 있음
            } //set 부분에 외부 value에서 의미가 있을 때 받아드리고 외부에서 제공한 값을 넣어주면 됨 
        }

        public Car(string plate, bool isSUV) //bool true or false //생성자
        {
            Console.WriteLine("Car 생성자");
            PlateNumber = plate;  //위에서 정의하고 있는 public 멤버변수값을 결정할수 있음 / PlateNumber 매개변수값으로 겨정
            IsSUV = isSUV;
            InTime = DateTime.Now;

        }

        public Car() { }
    }

    class Bike : Car  //자동차 클래스로부터 상속 받는 다
     {
        public string Maker;
        public Bike(string plate) :base(plate, false)
           {
               Console.WriteLine("Bike 생성자");
            }
        }
    }

    


Program.cs

using System;

namespace ParkingManagement
{
    class Park
    {

        static int baseCharge1 = 1000; // 소형 기본(30분) static 넣어서 정적멤버로 바꿈
        static int baseCharge2 = 1500; // 대형 기본(30분)
        static int Rate1 = 500; // 소형 요율(30분)
        static int Rate2 = 700; // 대형 요율(30분)


        static void CalculateCharge(Car car)   //요금계산하는 메서드 -> 메서드 반환을 생각해야함 void유요하지 않다, 빈손으로 돌아간다
        {
            Random rnd = new Random();
            car.OutTime = car.InTime.AddMinutes(rnd.Next(200));
            TimeSpan duration = car.OutTime - car.InTime;
            car.Duration=(int)duration.TotalMinutes;

            if (car.Duration <= 30)
            {
                if(car.IsSUV == true)
                {
                    car.PartCharge = baseCharge2;
                }
                else
                {
                    car.PartCharge = baseCharge1;
                }
            }
            else
            {
                if (car.IsSUV == true)
                {
                    car.PartCharge = baseCharge2 + 
                       (int)Math.Ceiling((car.Duration-30)/30.0)*Rate2;  //정수 나누기 정수가 안되서 30.0으로 바꿈
                }
                else
                {
                    car.PartCharge = baseCharge1 +
                           (int)Math.Ceiling((car.Duration - 30) / 30.0) * Rate1;
                }
            }
        }

        //다음 난수를 만들어줘  //결과값 정수 정수값으로 반환으로 정의해도 됨, 자동차 설계도에 사용하지 않았던 멤버변수 

        static void Main(string[] args) //진입점
        {

            Bike bike = new Bike("경남 1234"); //바이크의 이름을 소문자 바이크로 하라 
            bike.Maker = "harley Davidson";
            bike.Age = 10;
            Console.WriteLine("{0},{1},{2},{3}", bike.PlateNumber,bike.Maker,bike.Age,bike.IsSUV);


           /* Car car = new Car("1234", false);
            Car car1 = new Car();
            car.Age = 10;
            car.Age = -5;
            Console.WriteLine(car.Age);

            CalculateCharge(car);
                Console.WriteLine("차량번호: {0}, 입차: {1}, 출자: {2}",
                   car.PlateNumber, car.InTime, car.OutTime);
                Console.WriteLine("주차시간: {0}, 요금: {1}",
                car.Duration, car.PartCharge); */
            }
        }

    }




Car.cs

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

namespace ParkingManagement
{
    class Car //설계도
    {
        public string PlateNumber { get; } //private라는 접근제한자를 가지고 있음 -> 공개해야함 / 멤버변수 plateNumber 만듦
        public bool IsSUV { get; } //get만 가능, 읽기전용 속성 set은 허락해주는 것
        public DateTime InTime { get; } //몇시에 들어와서 언제 나갔나 멤버변수에 포함
        public DateTime OutTime;

        public int Duration; // 주차시간(분) - 정수형 변수 / 멤버변수 추가 interger형으로 멤버변수 추가
        public int PartCharge; // 주차요금(원)


        private int age;
        public int Age //접근제한자만 public 소문자 age와 대문자 Age를 엮어놓기만 하면 됨 

        {
            get { return age; } //대문자 Age가 외부에서 진짜 나이를 알고 싶을 때 소문자 age를 들고가라
            set
            {
                age = (value > 0) ? value : age;
                //외부에서 알려준 값이 음수라면 오류로 설정을 할 수 있음
            } //set 부분에 외부 value에서 의미가 있을 때 받아드리고 외부에서 제공한 값을 넣어주면 됨 
        }

        public Car(string plate, bool IsSUV) //bool true or false //생성자
        {
            Console.WriteLine("Car 생성자");
            PlateNumber = plate;  //위에서 정의하고 있는 public 멤버변수값을 결정할수 있음 / PlateNumber 매개변수값으로 겨정
            this.IsSUV = IsSUV; //이름이 공통일때 this를 사용 나의 IsSUV값을 내가 가지고 있는 멤버변수의 값을 넘겨받은 IsSUV에 넣어달라
            InTime = DateTime.Now;
        }

        public Car() { }
    }

    class Bike : Car  //자동차 클래스로부터 상속 받는 다
     {
        public string Maker;
        public Bike(string plate) : base(plate, false)
        {
               Console.WriteLine("Bike 생성자"); //자식을 생성하면 어미생성자가 먼저 실행
            }
        }
    }

    




Program.cs

using System;

namespace ParkingManagement
{
    class Park
    {

        static int baseCharge1 = 1000; // 소형 기본(30분) static 넣어서 정적멤버로 바꿈
        static int baseCharge2 = 1500; // 대형 기본(30분)
        static int Rate1 = 500; // 소형 요율(30분)
        static int Rate2 = 700; // 대형 요율(30분)


        static void CalculateCharge(Car car)   //요금계산하는 메서드 -> 메서드 반환을 생각해야함 void유요하지 않다, 빈손으로 돌아간다
        {
            Random rnd = new Random();
            car.OutTime = car.InTime.AddMinutes(rnd.Next(200));
            TimeSpan duration = car.OutTime - car.InTime;
            car.Duration=(int)duration.TotalMinutes;

            if (car.Duration <= 30)
            {
                if(car.IsSUV == true)
                {
                    car.PartCharge = baseCharge2;
                }
                else
                {
                    car.PartCharge = baseCharge1;
                }
            }
            else
            {
                if (car.IsSUV == true)
                {
                    car.PartCharge = baseCharge2 + 
                       (int)Math.Ceiling((car.Duration-30)/30.0)*Rate2;  //정수 나누기 정수가 안되서 30.0으로 바꿈
                }
                else
                {
                    car.PartCharge = baseCharge1 +
                           (int)Math.Ceiling((car.Duration - 30) / 30.0) * Rate1;
                }
            }
        }

        //다음 난수를 만들어줘  //결과값 정수 정수값으로 반환으로 정의해도 됨, 자동차 설계도에 사용하지 않았던 멤버변수 

        static void Main(string[] args) //진입점
        {

            Bike bike = new Bike("경남 1234"); //바이크의 이름을 소문자 바이크로 하라 
            bike.Maker = "harley Davidson";
            bike.Age = 10;
            Console.WriteLine("{0},{1},{2},{3}", bike.PlateNumber,bike.Maker,bike.Age,bike.IsSUV);


            Car car2 = bike as Car;


            /*Console.WriteLine(bike as Car); //변환이 불가능한 경우는 null값이 할당됨 as 가능이나 불가능을 null로 표현*/


            /* Car car = new Car("1234", false);
             Car car1 = new Car();
             car.Age = 10;
             car.Age = -5;
             Console.WriteLine(car.Age);

             CalculateCharge(car);
                 Console.WriteLine("차량번호: {0}, 입차: {1}, 출자: {2}",
                    car.PlateNumber, car.InTime, car.OutTime);
                 Console.WriteLine("주차시간: {0}, 요금: {1}",
                 car.Duration, car.PartCharge); */
        }
    }

    }

반응형