42seoul/projects

[C++] abstract class (좔상 클래슀)

moaoh 2023. 9. 13. 05:11

abstract class (좔상 클래슀)

ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ” 클래슀λ₯Ό 좔상 클래슀라고 λΆ€λ₯Έλ‹€.

class Test 
{
private:
public:
	virtual void sound() = 0; // μˆœμˆ˜κ°€μƒν•¨μˆ˜
};
class Test 
{
private:
public:
	virtual void sound() = 0;
};

class Copy : public Test
{
public:
	virtual void sound() {
		std::cout << "Hello";
	}
};

int main(void)
{
	Copy copy;
	copy.sound(); // output : "Hello"
	return (0);
};

μœ„μ™€ 같이 Test 클래슀λ₯Ό Copy ν΄λž˜μŠ€κ°€ 상속받은 κ²½μš°μ—λŠ” Testν΄λž˜μŠ€μ•ˆμ— μžˆλŠ” μˆœμˆ˜κ°€μƒν•¨μˆ˜μΈ sound()λ₯Ό

μ„ μ–Έ ν•΄μ€˜μ•Όν•œλ‹€.

 

선언을 ν•΄μ£Όμ§€μ•Šμ€ 경우

unimplemented pure virtual method 'sound' in 'TestTwo’

κ°€μƒν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄λ‘κ³  상속받은 μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ”°λ‘œ 선언을 ν•΄μ£Όμ§€μ•Šκ²Œλ˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό 찾을 수 μ—†λ‹€κ³ ν•˜λ©° 였λ₯˜κ°€ λ°œμƒλœλ‹€.

 

μΆ”μƒν΄λž˜μŠ€ μ‚¬μš©μš©λ„

μΆ”μƒν΄λž˜μŠ€μ˜ κ²½μš°μ—λŠ” μ΄λ¦„μ—μ„œ λ³΄μ΄λ‹€μ‹œν”Ό κ΅¬ν˜„μ΄ μ™„λ²½ν•˜μ§€ μ•Šμ•„ λ…λ‹¨μ μœΌλ‘œ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜κ³  ν•˜μœ„ν΄λž˜μŠ€μ˜ 섀계 λ˜λŠ” κ°€μ΄λ“œλΌμΈμ„ μ£ΌλŠ” μ—­ν• λ§Œ ν•˜λŠ” 클래슀둜 μ‚¬μš©λœλ‹€.

class Test 
{
private:
public:
	virtual void sound() = 0;
};

int		main(void)
{
	Test test; // error

	return (0);
}

μœ„μ™€ 같이 선언을 ν•΄μ„œ μ‚¬μš©μ„ ν• λ €κ³ ν•˜λ©΄ μΆ”μƒν΄λž˜μŠ€λΌ λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” 문ꡬ가 λ‚˜μ˜¨λ‹€.