๊ธ€ ์ž‘์„ฑ์ž: ๋˜ฅํด๋ฒ .
๋ฐ˜์‘ํ˜•

1. ์„ค๋ช…


 ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ณ , ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •,

๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํฌ์ธํ„ฐ๋กœ ์ž์‹ ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ ๊ฐ’์„ ์ง€์ •ํ•˜๊ณ  ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ virtual ํ‚ค์›Œ๋“œ์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

 

 virtual ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ€์ƒ ํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ virtual ํ‚ค์›Œ๋“œ๋Š” C++์—์„œ default๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ง€์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

virtual void speak() = 0;

์œ„์™€ ๊ฐ™์ด virtual ํ‚ค์›Œ๋“œ ๋งจ ์šฐ์ธก์— = 0; ์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์ˆœ์ˆ˜ ๊ฐ€์ƒ ํ•จ์ˆ˜(pure virtual function)๊ฐ€ ๋œ๋‹ค. ์ˆœ์ˆ˜ ๊ฐ€์ƒ ํ•จ์ˆ˜๋Š” ์ง์ ‘ ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding) ๋˜์–ด์•ผ๋งŒ ํ•œ๋‹ค.

 

2. ์˜ˆ์‹œ


2.1) virtual ํ‚ค์›Œ๋“œ๊ฐ€ ์—†์„ ์‹œ

#include <iostream>

using namespace std;

class Parent
{
public:
	Parent() { cout << "Parent Constructor Call" << endl; }
	void virtual_func() { cout << "Parent virtual_func Call" << endl; }
};

class Child : public Parent
{
public:
	Child() { cout << "Child Constructor Call" << endl; }
	void virtual_func() { cout << "Child virtual_func Call" << endl; }
};


int main() {
	Parent* p;
	p = new Child;
	p->virtual_func();
	
	return 0;
}
Parent Constructor Call
Child Constructor Call
Parent virtual_func Call

 

2.1) virtual ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ์„ ์‹œ

#include <iostream>

using namespace std;

class Parent
{
public:
	Parent() { cout << "Parent Constructor Call" << endl; }
	virtual void virtual_func() { cout << "Parent virtual_func Call" << endl; }
};

class Child : public Parent
{
public:
	Child() { cout << "Child Constructor Call" << endl; }
	void virtual_func() { cout << "Child virtual_func Call" << endl; }
};


int main() {
	Parent* p;
	p = new Child;
	p->virtual_func();
	
	return 0;
}
Parent Constructor Call
Child Constructor Call
Child virtual_func Call
๋ฐ˜์‘ํ˜•

'Language > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] keyword: const  (0) 2020.07.22
[C++11] keyword: final  (0) 2020.07.22
[C++11] keyword: override  (0) 2020.07.22
[C++] keyword: public, protected, private  (0) 2020.07.22
[C/C++] Socket Send/Receive Buffer์— ๋Œ€ํ•œ ๊ณ ์ฐฐ  (1) 2019.07.08