우선, 나는 이런 질문에 대해 말하지 않는다. (1, 2). 나는 이미 생성자를 가지고 있고 정의에 의해서가 아닌 값으로 중첩 된 클래스에 대해 이야기하고 있습니다.중첩 클래스의 생성자를 호출하는 방법
는 현재 내가 작동이 방법을 가지고 있지만, new
을 사용하고 IMO 추악한 :
class A {
private:
int value;
public:
A(int _value);
};
class B {
private:
A *a;
public:
B(int _value);
};
B의 생성자 :
B::B(int _value)
{
a = new A(_value);
}
내가 A a
에 A *a;
을 변경한다면, A
의 생성자가 같은 방식으로 호출되도록 B
을 어떻게 만들 수 있습니까?
나는 시도했다 : A
에 대한 몇 가지 명시 적 void A::init(_value)
(필요 추가 생성자를 사용하여 new
- : 그것은없이 가능하지 않는 것
B::B(int _value) { a = A(_value); // no matching function for call to ‘A::A()’ a = A::A(_value); // cannot call constructor ‘A::A’ directly a(_value); // no match for call to ‘(A) (int&)’ a.A(_value); // invalid use of `A::A` }
인수 없음)
- 클래스 A를 확장 (특정 개인 구성원을 protected 및 w) 원하지 않는 방식으로
memcpy()
(A temp(_value); memcpy(&a, &temp, sizeof (A));
)
의
참조 멤버와 생성자 이니셜 라이저 목록을 사용하십시오. –
참조가이 경우 값보다 유리합니까? 두 가지가 모두'B '의 생성시 생성되는 것처럼 보이며, 둘 다 같은 사용법 구문과 의미를가집니다. –
아니요, 아마도 귀하의 질문에 잘못이 있습니다. –