본문 바로가기

System Programmings/C++

[C++] 가상함수의 활용

반응형

----------------------------------------------------
가상 함수 사용시 소멸자에도 가상 함수를 사용해야 한다.
----------------------------------------------------

#include <iostream>
using namespace std;

/*** Class alpha ***/
class alpha
{
public:
	int _x;
public:
	alpha();
	alpha(int x);
	alpha(const alpha& pt);
	void print(); // virtual 함수를 사용할 경우와 사용하지 않을 경우의 차이
};

alpha::alpha()
{
	_x=0;
}

alpha::alpha(int x)
{
	_x=x;
}

alpha::alpha(const alpha& pt)
{
	_x=pt._x;
}

void alpha::print()
{
	cout << "alpha = " << _x << endl;
}

/*** Class beta ***/
class beta : public alpha
{
public:
	int _y;
public:
	beta();
	beta(int y);
	beta(const beta& pu);
	void print();
};

beta::beta()
{
	_y=0;
}

beta::beta(int y)
{
	_y=y;
}

beta::beta(const beta &pu)
{
	_y=pu._y;
}
void beta::print()
{
	cout << "beta = " << _y << endl;
}

/*** Class gamma ***/
class gamma : public alpha
{
public:
	int _z;

	gamma();
	gamma(int z);
	gamma(const gamma& pv);
	void print();
};

gamma::gamma()
{
	_z=0;
}
gamma::gamma(int z)
{
	_z=z;
}
gamma::gamma(const gamma& pv)
{
	_z=pv._z;
}
void gamma::print()
{
	cout << "gamma = " << _z << endl;
}
/*** main ***/

int main()
{
	// 클래스 타입 선언
	alpha a;
	beta b;
	gamma c;
	a.print();
	b.print();
	c.print();
	cout << endl;

	// alpha 객체 배열
	alpha *arr[3];

	arr[0]=&(a=10);
	arr[1]=&(b=20);
	arr[2]=&(c=30);

	for(int i=0; i<3; i++)
	arr[i]->print();

	return 0;
}

가상함수 없을 때 (원본 코드)



alpha 클래스에 가상 함수를 적용 했을 때




반응형