: 가상함수에 = 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
코드의 재사용 및 확장
코드의 ...