왜 클래스 선언에 데이터를 넣어야 하나요?
그렇게 하지 마세요. 만약에 인터페이스에 데이터를 원치 않을경우, 인터페이스를 정의한 클래스에 넣지마세요. 그 대신 파생 클래스에 넣으세요. "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;
};
이런 타입은 빌트인 타입으로 많이 사용되도록 고안되었고, 진정으로 로컬 오브젝트(힙이 아니라 스택에 할당되는 객체들)로 만들어질 수 있고, 간단한 동작들의 인라이닝을 적당히 지키도록 선언문에 표현해야합니다. 로컬 오브젝트와 인라이닝은 내장된 복소수 타입이 제공되는 언어의 것과 거의 유사한 성능을 얻는데 필요합니다.
'번역 > Bjarne Stroustrup's C++ Style and Technique FAQ' 카테고리의 다른 글
Why don't we have virtual constructors? (0) | 2019.02.26 |
---|---|
Why are member functions not virtual by default? (0) | 2019.02.26 |
Why do my compiles take so long? (4) | 2019.01.15 |
Why doesn't my constructor work right? (4) | 2019.01.15 |
Does "friend" violate encapsulation? (0) | 2018.12.19 |
댓글