반응형

문제

문제 7번의 Circle 객체에 대해 다음 연산이 가능하도록 연산자를 구현하라. 

int main()
{
	Circle a(5), b(4);
	b = 1 + a;
	a.show();
	b.show();
}

 

결과

radius = 5 인 원

radius = 6 인 원

 

소스코드(friend 함수 구현)

#include<iostream>
using namespace std;
class Circle {
	int radius;
public:
	Circle(int radius = 0) { this->radius = radius; }
	void show() { cout << "radius = " << radius << " 인 원" << endl; }
	friend Circle operator+(int n,Circle a);
};
Circle operator+(int n, Circle a)
{
	a.radius += n;
	return a;
}

int main()
{
	Circle a(5), b(4);
	b = 1 + a;
	a.show();
	b.show();
}

 

 

반응형
반응형

문제

원을 추상화한 Circle 클래스는 간단히 아래와 같다.

class Circle {
	int radius;
public:
	Circle(int radius = 0) { this->radius = radius; }
	void show() { cout << "radius = " << radius << " 인 원" << endl; }
};

 

다음 연산이 가능하도록 연산자를 프렌드 함수로 작성하라

int main()
{
	Circle a(5), b(4);
	++a;
	b = a++;
	a.show();
	b.show();
}

 

결과

radius = 7 인 원

radius = 6 인 원

 

소스코드

#include<iostream>
using namespace std;
class Circle {
	int radius;
public:
	Circle(int radius = 0) { this->radius = radius; }
	void show() { cout << "radius = " << radius << " 인 원" << endl; }
	friend void operator++(Circle& a);
	friend Circle& operator++(Circle& a, int b);
};

void operator++(Circle& a)
{
	++a.radius;
}
Circle& operator++(Circle& a,int b)
{
	Circle temp = a;
	a.radius++;
	return temp;
}
int main()
{
	Circle a(5), b(4);
	++a;
	b = a++;
	a.show();
	b.show();
}

설명 : 전위, 후위 연산자 모두 참조 매개변수를 사용한다. 전위 연산자인 ++a 의 경우 리턴 값이 필요없으므로 참조매개변수로 a.radius값을 1증가시킨다. 후위 연산자인 경우 매개 변수를 가지도록 선언이 되며, 후위 연산자는 그 줄의 코드가 실행된 후 증가를 시키기 때문에 참조매개변수를 이용해 a.radius의 값은 증가시켜주지만 temp의 이전의 상태를 삽입하여 리턴한다. 이 때 매개변수는 사용되지 않으므로 무시해도 된다. 단지, 전위인지 후위인지 구분하는 매개 변수이다. 

 

오류 또는 수정 사항 궁금한 점 있으시면 댓글로 남겨주세요.

반응형
반응형

문제

2차원 행렬을 추상화한 Matrix 클래스를 활용하는 다음 코드가 있다.

int main()
{
	Matrix a(4, 3, 2, 1), b;
	int x[4], y[4] = { 1,2,3,4 };
	a >> x;
	b << y;
	for (int i = 0; i < 4; i++)cout << x[i] << ' ';
	cout << endl;
	b.show();
}

 

결과

4 3 2 1

Matrix = { 1 2 3 4 }

 

1. <<, >> 연사자 함수를 Matrix 멤버 함수로 구현하라.

#include<iostream>
using namespace std;

class Matrix {
	int a[4];
public:
	Matrix() {};
	Matrix(int a, int b, int c, int d) {
		this->a[0] = a;
		this->a[1] = b;
		this->a[2] = c;
		this->a[3] = d;
	}
	void show();
	void operator>>(int x[]);
	void operator<<(int y[]);
};
void Matrix::show()
{
	cout << "Matrix = { " << a[0] << ' ' << a[1] << ' ' << a[2] << ' ' << a[3] << " }" << endl;
}
void Matrix::operator>>(int x[])
{
for(int i =0;i<4;i++)
	x[i] = a[i];
}
void Matrix::operator<<(int y[])
{
for(int i= 0 ;i<4;i++)
	a[i] = y[i];
}
int main()
{
	Matrix a(4, 3, 2, 1), b;
	int x[4], y[4] = { 1,2,3,4 };
	a >> x;
	b << y;
	for (int i = 0; i < 4; i++)cout << x[i] << ' ';
	cout << endl;
	b.show();
}

 

2. <<, >> 연산자 함수를 Matrix의 프렌드 함수로 구현하라.

#include<iostream>
using namespace std;

class Matrix {
	int a[4];
public:
	Matrix() {};
	Matrix(int a, int b, int c, int d) {
		this->a[0] = a;
		this->a[1] = b;
		this->a[2] = c;
		this->a[3] = d;
	}
	void show();
	friend void operator>>(Matrix a, int x[]);
	friend void operator<<(Matrix& b,int y[]);
};
void Matrix::show()
{
	cout << "Matrix = { " << a[0] << ' ' << a[1] << ' ' << a[2] << ' ' << a[3] << " }" << endl;
}
void operator>>(Matrix a,int x[])
{
	for (int i = 0; i < 4; i++)
		x[i] = a.a[i];
}
void operator<<(Matrix& b, int y[])
{
	for (int i = 0; i < 4; i++)
		b.a[i] = y[i];
}
int main()
{
	Matrix a(4, 3, 2, 1), b;
	int x[4], y[4] = { 1,2,3,4 };
	a >> x;
	b << y;
	for (int i = 0; i < 4; i++)cout << x[i] << ' ';
	cout << endl;
	b.show();
}

 

오류 또는 수정 사항 궁금한 점 있으시면 댓글로 남겨주세요.

반응형

+ Recent posts