Review:class의 원형과 정의 분리

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

🤔 지난 시간에는 Rectangle 클래스를 public내에서 선언과 정의를 동시에 하였다.
이번에는 클래스의 네임스페이스를 활용하여 함수를 외부에 정의를 해보자.

class의 원형과 정의 분리

#include <iostream>

using namespace std;

class Rectangle
{
private:
	int length;
	int breadth;

public:
	Rectangle() { length = breadth = 0; }
	Rectangle(int, int);

	int area();
	int perimeter();
	
	void setlength(int l)
	{
		length = l;
	}
	int getlength()
	{
		return length;
	}

	void setbreadth(int b)
	{
		breadth = b;
	}
	int getbreadth()
	{
		return breadth;
	}

	~Rectangle();
};

Rectangle::Rectangle(int l, int b)
{
	length = l;
	breadth = b;
}

int Rectangle::area()
{
	return length * breadth;
}

int Rectangle::perimeter()
{
	return 2 * (length + breadth);
}

Rectangle::~Rectangle()
{
}

int main()
{
	Rectangle r(5, 10);
	cout << r.area() << endl;
	cout << r.perimeter() << endl;
	r.setlength(30);
	r.getlength();

	r.setbreadth(15);
	r.getbreadth();

	cout << "After corrrecting length and breadth:" << '\n';
	cout << r.area() << endl;
	cout << r.perimeter() << endl;
	
	return 0;
}

  • 함수의 원형(prototype or signature)부분의 parameter는 데이터형만 적어도 된다.
  • setlength,breadth는 전에 초기화한 방식처럼 멤버변수를 parameter로 초기화하였고, getlength,breadth는 int형을 반환하였다.
  • Rectangle::Rectangle(int l, int b) 네임스페이스를 이용하여 매개변수가 있는 생성자를 만들었고, int Rectangle::area(), int Rectangle::perimeter()와 같이 반환형이 있는 함수를 외부에 정의하였다.

bonus:분할 컴파일을 통한 함수의 원형과 정의 분리

💻Rectangle.h

#include <iostream>

using namespace std;
#ifndef RECT_H
#define RECT_H

class Rectangle
{
private:
	int length;
	int breadth;

public:
	Rectangle() { length = breadth = 0; }
	Rectangle(int, int);

	int area();
	int perimeter();

	void setlength(int l)
	{
		length = l;
	}
	int getlength()
	{
		return length;
	}

	void setbreadth(int b)
	{
		breadth = b;
	}
	int getbreadth()
	{
		return breadth;
	}


	~Rectangle();
}; 
#endif

  • 위에서 명시한 것처럼, set,get함수는 정의가 짧아서 그냥 헤더파일에 넣었다.

💻Rectangle.cpp

#include <iostream>
#include "Rectangle.h"

Rectangle::Rectangle(int l, int b)
{
	length = l;
	breadth = b;
}

int Rectangle::area()
{
	return length * breadth;
}

int Rectangle::perimeter()
{
	return 2 * (length + breadth);
}

Rectangle::~Rectangle()
{
}

💻main.cpp

#include <iostream>
#include "Rectangle.h"

using namespace std;


int main()
{
	Rectangle r(5, 10);
	cout << r.area() << endl;
	cout << r.perimeter() << endl;
	r.setlength(30);
	r.getlength();

	r.setbreadth(15);
	r.getbreadth();

	cout << "After corrrecting length and breadth:" << '\n';
	cout << r.area() << endl;
	cout << r.perimeter() << endl;

	return 0;
}
profile
모든 코드에는 이유가 있기에 원인을 파악할 때까지 집요하게 탐구하는 것을 좋아합니다.

0개의 댓글