본문 바로가기
번역/Bjarne Stroustrup's C++ Style and Technique FAQ

Why do I have to put the data in my class declarations?

by 겜게준 2019. 1. 31.

왜 클래스 선언에 데이터를 넣어야 하나요?


그렇게 하지 마세요. 만약에 인터페이스에 데이터를 원치 않을경우, 인터페이스를 정의한 클래스에 넣지마세요. 그 대신 파생 클래스에 넣으세요. "Why do my compiles take so long?"를 참고하세요. 가끔 클래스에 데이터를 표현하고 싶을 때가 있습니다.

complex (복소수?) 클래스를 고려해봅시다:


template<class Scalar> class complex {

public:

complex() : re(0), im(0) { }

complex(Scalar r) : re(r), im(0) { }

complex(Scalar r, Scalar i) : re(r), im(i) { }

// ...


complex& operator+=(const complex& a)

{ re+=a.re; im+=a.im; return *this; }

// ...

private:

Scalar re, im;

};



이런 타입은 빌트인 타입으로 많이 사용되도록 고안되었고, 진정으로 로컬 오브젝트(힙이 아니라 스택에 할당되는 객체들)로 만들어질 수 있고, 간단한 동작들의 인라이닝을 적당히 지키도록 선언문에 표현해야합니다. 로컬 오브젝트와 인라이닝은 내장된 복소수 타입이 제공되는 언어의 것과 거의 유사한 성능을 얻는데 필요합니다.

댓글