• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

friend함수 관련 질문이 있습니다.

23.02.12 19:05 작성 조회수 217

0

class Cents
{
private:
	int m_cents;

public:
	Cents(int cents = 0) { m_cents = cents; } //생성자
	int getcents() const { return m_cents; }

	friend Cents operator + (const Cents& c1, const Cents& c2)
	{
		return Cents(c1.m_cents + c2.m_cents);// 안으로 들어왔기 때문에 getcents()함수를 통해서 접근할 필요가 없음.
	}

};

이렇게 클래스 안에서 정의한것과

 

class Cents
{
private:
	int m_cents;

public:
	Cents(int cents = 0) { m_cents = cents; } //생성자
	int getcents() const { return m_cents; }

	friend Cents operator + (const Cents& c1, const Cents& c2);

};

Cents operator + (const Cents& c1, const Cents& c2)
{
	//return Cents(c1.getcents() + c2.getcents());
	return Cents(c1.m_cents + c2.m_cents);
}

이렇게 밖에서 정의하는것의 차이가 궁금합니다.

강의 마지막 부분에 클래스 부득이하게 멤버변수라던지 등등이 선언이 안되서 컴파일 에러가 발생하기 때문에 아예 존재한다 정도만 알려주는 선에서 미리 선언만 클래스 내부에서 하고 정의는 아예 밖에서 해버리는 케이스를 예로 들면서 설명해주셨는데요

 

오직 이런 상황만이 저렇게 friend함수를 외부에서 정의하는 이유에 해당되는지

 

아니면 주된 목적이 따로 있는지 궁금합니다.

 

요약.
1.friend함수를 클래스 내부or외부 에서 정의할때 기능적인 차이 혹은 이유가 존재하는지??

 

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2023.02.14

클래스 부득이하게 멤버변수라던지 등등이 선언이 안되서 컴파일 에러가 발생하기 때문에 아예 존재한다 정도만 알려주는 선에서 미리 선언만 클래스 내부에서 하고 정의는 아예 밖에서 해버리는 케이스를 예로 들면서 설명해주셨는데요

위 말씀의 의미가

'유지보수 과정에서 오류가 발생할 수 있다'는 점을 지점을 언급하신 지점인듯 한데(맞나요?)

일단 정의하는 지점에 대한 정해진 규약은 없습니다.

유지보수/코드의 가독성 측면에서의 차이는 있을 수 있겠으나

기능적으로 차이가 있지는 않습니다.