12.7 순수 가상함수

보물창고·2021년 8월 13일
0

순수 가상함수란?

: 가상함수에 = 0을 붙임으로써 바디가 없고, 선언만 하는 함수를 말하고,
추상클래스와 인터페이스 클래스로 분류된다.

추상클래스란?

: 순수 가상함수를 하나라도 가지고 있는 클래스를 말한다.

  • 할당은 불가능하다.

  • 추상클래스를 상속받은 파생클래스는 반드시 순수가상으로 되어있는 함수를 재정의해야 한다!

  • 순수 가상함수와 멤버 함수, 변수들의 조합으로 구성된 클래스

  • 추상클래스 예제

  • 추상클래스를 객체로 사용 불가능!

  • 상향형변환을 이용한 외부 함수 호출하기

코드


#include <iostream>
#include <string>

using namespace std;

class Animal
{
private : 
	string mName;
public : 
	Animal(const string &inName) : mName{inName}
	{}

	virtual void speak() = 0;
};

class Tiger : public Animal
{
public : 
	Tiger(const string & inName) : Animal(inName) {}
	void speak() override
	{
		cout << "어흥" << endl;
	}
};

class Dog : public Animal
{
public : 
	Dog(const string &inName) : Animal(inName) {}
	void speak() override
	{
		cout << "왈왈!" << endl;
	}
};

int main()
{
	Tiger t("tiger1");
	t.speak();

	Dog d("dog1");
	d.speak();

	return 0;
}


인터페이스 클래스

: 클래스에서 구현할 함수에 대해 추상클래스를 미리 만들고
상속 받음으로서 구현해야 할 함수라는 것을 지정할 수 있다.

  • 순수가상 함수들로만 구성되어 있다.

인터페이스 함수를 구현할때는
클래스 앞에 I~를 붙이자!

  • 인터페이스를 이용한 예제

  • 상속형변환을 이용한 외부 함수 호출

소스코드


#include <iostream>
#include <string>

using namespace std;

class IAnimal
{
public : 
	virtual void speak() = 0;
};

class Information
{
private : 
	string mName;
public : 
	Information(const string &inName) : mName{ inName } {}
};

class Tiger : public IAnimal , Information
{
public : 
	Tiger(const string &inName) : Information(inName) {}
	void speak() override{
		cout << "어흥" << endl;
	}
};

class Dog : public IAnimal, Information
{
public : 
	Dog(const string &inName) : Information(inName) {}
	void speak() override{
		cout << "와왈!" << endl;
	}
};

void print(IAnimal &animal)
{
	animal.speak();
}


int main(){
	Tiger t("tiger1");
	print(t);
	Dog d("dog1");
	print(d);

	return 0;
}


추상클래스와 인터페이스 클래스 차이

https://shrtorznzl.tistory.com/14

추상클래스

  • 추상클래스는 순수가상함수 1개 이상과 멤버 변수, 또는 생성자 일반 메서드로
    이루어져 있다.
  • 상속을 받아서 기능을 확장하는 것

코드의 재사용 및 확장

인터페이스 클래스

  • 파생클래스는 부모의 함수를 반드시 구현해야만 함.
  • 인터페이스 클래스는 반드시 순수가상함수로만 이루어져 있어야 한다.
  • 인터페이스는 다중 상속이 가능하다.

코드의 ...

profile
🔥🔥🔥

0개의 댓글