객체지향 프로그램으로 변환하기

Icarus<Wing>·2022년 10월 11일
0

🤔 지난시간에 우리는 구조체도 call by value로 값을 그대로 복사할 수 있는 것을 알았다. 그래서 이번시간에는 call by value를 이용한 함수작성-> call by value를 이용한 구조체-> 그리고 마지막으로 class로 순서대로 변환을 할 것이다.

call by value를 통한 함수 작성

#include <iostream>

using namespace std;

int area(int l, int b)
{
	return l * b;//call by value
}

int perimeter(int l, int b)
{
	int p;
	p = 2 * (l + b);
	return p;//call by value
}

int main_func()
{
	int length = 0, breadth = 0;
	cout << "Enter Length and Breadth:";
	cin >> length >> breadth;

	int a = area(length, breadth);
	int peri = perimeter(length, breadth);

	cout << "Area:" << a << endl;
	cout << "Perimeter:" << peri << endl;

	return 0;
}

  1. 사용자가 length, breadth를 입력한다
  2. area(length,breadth)를 호출하면 argument가 parameter로 복사가 되어 l*b를 반환하고 함수 종료
  3. perimeter(length,breadth)를 호출하면 역시 call by value에 의해 p를 반환하고 함수 종료
  4. a와 peri로 저장된 값이 마지막에 출력되어 나온다

call by value를 이용하여 함수->구조체로 변환

#include <iostream>

using namespace std;

struct Rectangle {
	int length;
	int breadth;
};

int area(Rectangle r1)
{
	return r1.length * r1.breadth;
	//call by value
}

int perimeter(Rectangle r1)
{
	int p;
	p = 2 * (r1.length + r1.breadth);
	return p;//call by value
}

int main_st()
{
	Rectangle r = { 0,0 };
	cout << "Enter Length and Breadth:";
	cin >> r.length >> r.breadth;

	int a = area(r);
	int peri = perimeter(r);

	cout << "Area:" << a << endl;
	cout << "Perimeter:" << peri << endl;

	return 0;
}

  1. 구조체 Rectangle을 먼저 선언한다
  2. r에는 쓰레기값이 들어가있으므로 멤버변수를 각각 0으로 초기화한다.
  3. 멤버 연산자를 이용하여 값을 입력한다
  4. area(r)을 호출하면 r->r1으로 복사가 되어 값을 반환후 함수 종료
  5. perimeter(r)역시 위와 같은 과정 수행
  6. 저장된 a,peri를 출력

구조체->class로 변환

#include <iostream>

using namespace std;

class Rectangle {
private:
	int length;
	int breadth;
public:
	void initialize(int l, int b)//class명과 이름이 같아야 생성자 객체 생성
	{
		length = l;
		breadth = b;
	}

	int area()
	{
		return length*breadth;
	}
	
	int perimeter()
	{
		int p;
		p = 2 * (length+breadth);
		return p;
	}

};

int main()
{
	Rectangle r;
	
	int l = 0, b = 0;//initialize to zero 
	cout << "Enter Length and Breadth:";
	cin >> l >> b;//input l, b
	
	r.initialize(l, b);//l,b -> length, breadth

	int a = r.area();
	int peri = r.perimeter();

	cout << "Area:" << a << endl;
	cout << "Perimeter:" << peri << endl;

	return 0;
}

  • class는 멤버변수를 private으로, 멤버함수를 public으로 둘 수 있다(structure는 멤버변수의 default값이 public이라 멤버연산자로 접근가능)
  1. Rectangle r로 class 선언(매개변수가 없으면 default 생성자를 만든다)
  2. l,b에는 쓰레기값이 들어있으므로 0으로 초기화
  3. l,b에 값 입력
  4. l,b를 parameter에 복사한 후 initialize함수를 통해 private 멤버로 저장
  5. area(), perimeter()함수는 public 영역이므로 멤버연산자를 통해 메소드 수행
  6. 저장된 a,peri를 출력
profile
모든 코드에는 이유가 있기에 원인을 파악할 때까지 집요하게 탐구하는 것을 좋아합니다.

0개의 댓글