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;
}