가상 함수 (Virtual Function)

 

 부모클래스에서는 virtual 키워드를 자식클래스에서는 override 키워드를 사용해야 합니다.

 

namespace Virtual
{
    public class Parent
    {
        public virtual void Smile()                            // 가상함수임을 명시
        {
            Console.WriteLine("Parent.Smile");
        }
    }

    public class Child : Parent
    {
        public override void Smile()                      // 자식 클래스에서 필요하면 오버라이드해서 재정의
        {
            Console.WriteLine("Child.Smile");
        }
    }
}

 

 

 

순수 가상 함수 구현 (Pure Virtual Function)

 

 C++ 에서 구현부가 없이 자식클래스에서 반드시 구현해야 하는 함수를 순수 가상 함수라고 부릅니다. C#에서는 추상 함수라고 부릅니다. 추상함수를 포함하는 클래스에는 abstract 키워드를 사용하여 추상 클래스라고 명시를 해야 합니다.

 

만약 Parent 클래스에 abstract를 빼면 아래와 같은 에러가 발생합니다.

'Abstract.Parent.Smile()' is abstract but it is contained in non-abstract class 'Abstract.Parent'

 

namespace Abstract
{
    public abstract class Parent                          // 추상 클래스라고 명시
    {
        public abstract void Smile();                      // 자식클래스에서 반드시 구현부를 정의해야 해야함
    }

    public class Child : Parent
    {
        public override void Smile()                       // 자식클래스에서 구현부 오버라이드
        {
            Console.WriteLine("Child.Smile");
        }
    }
}


Posted by great-artist
,