Предположим, что у меня есть класс, который определяется какПравило трех для внутреннего класса, внешний класс
Ах
#ifndef A_H
#define A_H
#include <vector>
class A
{
int n;
std::vector<A::B> elements;
public:
A();
A(int);
class B
{
int m;
A* a;
public:
B();
B(int);
B(int, A*);
};
};
#endif
a.cpp
#include "A.h"
A::A()
: n(0)
{
}
A::A(int x)
: n(x), elements(std::vector<A::B>(n))
{
for (int j = 0; j < this->n; j++)
{
B newElement(j, this);
this->elements[j] = newElement;
}
}
A::B::B()
: m(0), a(0)
{
}
A::B::B(int j)
: m(j), a(0)
{
}
A::B::B(int j, A* aPtr)
: m(j), a(aPtr)
{
}
Как следует определить конструкторы копирования, перегруженные операторы присваивания и деструкторы, так что я избегаю бесконечной рекурсии при удалении и избегаю, если возможно, необходимо использовать new
? A::B
нуждается в указателе на A
, чтобы определить операторы, которые программист может решить добавить. Кроме того, программист может принять решение написать класс C, который расширяет и C::D
, расширяющий A::B
Сохраните некоторые неприятности и не используйте вложенные классы. –
@ThomasMatthews Я полагаю, профессор не понравится. – xinaiz
В этом случае OP должен спросить профессора, а не StackOverflow. :-) –