순수가상함수 / 가상함수

Aliya Shin·2023년 2월 2일
0

순수 가상함수란

  • 형태
    일반적인 가상함수의 형태가 virtual double area() {return 0;}였다면,
    순수 가상함수는 virtual double area()=0;으로 함수 선언 부분은 같지만, 뒤에 구현 부분이 없고 =0; 으로 끝난다는 차이가 있다.
  • 사용 이유
    부모클래스가 상속받은 자식클래스에서 해당함수를 무조건 선언하게 시키고자 할 때, 쓸 수 있다.

    현실세계를 예를 들면, 부모가 자신은 못하지만, 자식이 꼭 해줬으면 하는 것을 "강제"로라도 하게 하는 것

  • 주의사항
    순수가상함수를 가지고 있는 부모클래스는 "추상클래스"로 객체(인스턴스)를 만들 수 없다
    대신에, 포인터 객체는 가능하다
    아래의 코드를 보면 이해가 가능하다
#include <iostream>
using namespace std;

class Parent{
protected:
	double x,y;
public:
	virtual double area() {return 0;} // 일반적인 가상함수
    virtual double area() = 0; //순수 가상함수 --> 자식이 무조건 내용구현해야
};

class Daughter: public Parent{
private:
	int one,two;
public:
	Daughter(int x,int y)
    	{one=x;two=y;}
    double area(){return (one*two);}//딸은 곱하기를 수행
};

class Son: public Parent{
private:
	int one,two;
public:
	Son(int x,int y)
    	{one=x;two=y;}
    double area(){return (one+ two);}//아들은 더하기를 수행
};

int main()
{
//Parent p; 불가능! 추상클래스는 객채를 만들수 없음
Parent *p; 하지만, 포인터로는 가능
Daughter(10,20);
Son(10,20);

p=&Daughter;
cout << p->area() ; //Daughter의 area호출되므로 200출력
p=&Son;
cout << p->son() ; //Son의 area호출되므로 30출력
return 0;
}
profile
느리지만 꾸준히 성장하는 거북이 같은 개발자

0개의 댓글