정확하게 이해한다면 구성을 구현하는 데 적어도 두 가지 다른 방법이 있습니다. (스마트 포인터 구현의 경우는 단순화를 위해 제외 나는 거의 STL을 사용하고 배울 수있는 욕망을하지 않습니다.).C++에서 클래스 구성을 구현하는 방법은 무엇입니까?
는 이제 위키 백과 example를 살펴 보자 :
class Car
{
private:
Carburetor* itsCarb;
public:
Car() {itsCarb=new Carburetor();}
virtual ~Car() {delete itsCarb;}
};
그래서를, 그것은 하나의 방법입니다 - 개체을 전용 멤버로 가리키는 포인터가 있습니다. 하나 같이 그것을 다시 작성할 수 있습니다 :이 경우
class Car
{
private:
Carburetor itsCarb;
};
우리는 private 멤버로 객체 자체를 가지고있다. (그런데, 나는이 개체를 전문 용어의 관점에서 객체라고 부른다.)
두 번째 경우에는 암시 적으로 기본 생성자를 호출 할 필요는 없습니다 (기본값이 아닌 생성자를 호출해야하는 경우 이니셜 라이저 목록에서 가능) 및 소멸자. 그러나 큰 문제는 아닙니다 ...
그리고 물론이 두 경우는 좀 더 분명히 다릅니다. 예를 들어, Car 클래스의 const 메소드에서 Carburetor 인스턴스의 비 const 메소드를 두 번째 케이스에서 호출하는 것은 금지되어 있습니다 ...
사용할 "규칙"이 있습니까? 내가 놓친 게 있니?
"Car 클래스의 const 메소드에서 Carburetor 인스턴스의 비 const 메소드를 호출하는 것은 금지되어 있습니다"라고 생각합니다. –
@ Laurence Ooops. 당신은 물론 맞습니다 ... – Wildcat
"[나는] [STL]을 배우려는 욕구가 없습니다." 뭐? 당신은 STL을 무시함으로써 C++의 거대한 부분을 놓치고 있습니다. – rlbond