Псевдоопределение класса:
Базовый виртуальный класс A:
class A {
public:
virtual ~A();
virtual void doSomething() const = 0;
};
Класс B Наследование от A:
class B : public A {
public:
void doSomething() {} const;
}
Базовый виртуальный класс C:
class C {
public:
virtual ~C();
virtual void doSomething() const = 0;
};
Класс D, наследуемый от C:
class D : public C {
public:
D(const &A _a = *A_Ptr(new B)) : a(_a) {}
void doSomething() {} const;
private:
const &A a;
}
A_Ptr - это typedef общего указателя класса A.
Моя проблема с объявлением другого класса.
Давайте назовем это классом X:
class X {
public:
X(const &A _a = *A_Ptr(new B), const &C _c = *C_Ptr(new D(a)) : a(_a), c(_c) {}
private:
const &A a;
const &C c;
}
X(const &A _a = *A_Ptr(new B), const &C _c = *C_Ptr(new D(a))
- эта часть инициализации не работает. Что работает, это
X(const &A _a = *A_Ptr(new B), const &C _c = *C_Ptr(new D)
Но если я сделаю это таким образом, я создам два общих указателя типа класса A, чего я бы не хотел. С другой стороны, что-то вроде X(const &A _a = *A_Ptr(new B), const &C _c = *C_Ptr(new D(a))
или X(const &A _a = *A_Ptr(new B), const &C _c = *C_Ptr(new D(_a))
не работает. Есть какой-нибудь известный способ решить эту проблему?
Заранее спасибо:)