C++ C+中的最佳OO设计实现+;?

C++ C+中的最佳OO设计实现+;?,c++,oop,C++,Oop,这可能更多的是关于味道 大概是这样的: class A:public vector<int>{}; class B:public vector<A>{ }; class C{ public: vector<B> cs; }; class A:vector<int>{ void foo( C &c); }; 这是不可能的,因为C需要B和B需要A完全声明。然后我看到两个选项: 1) 使foo如此:void foo(void*c)并在实现

这可能更多的是关于味道

大概是这样的:

class A:public vector<int>{};

class B:public vector<A>{
};

class C{
public:
vector<B> cs;
};
class A:vector<int>{
void foo( C &c);
};
这是不可能的,因为
C
需要
B
B
需要
A
完全声明。然后我看到两个选项:

1) 使foo如此:
void foo(void*c)并在实现上(在A.cpp中)进行转换。这方面的问题并不是很好或干净,对其他开发人员来说也有点混乱

2) 在我正在处理的命名空间上创建一个对象。这违反了坚实的原则,特别是单一责任原则


也许还有第三条路我看不见,也没有什么不方便的。任何人都可以告诉我是否有更正确的剂量形式?

使用正向声明:

class C;

使用远期申报:

class C;

我不确定我是否看到了你的问题。以下方面没有问题:

class C;
class A
{
    void foo( C& c );
};
(但是,您的
C
有问题。类
C
不能 包含一个
std::vector
,因为
std::vector
要求 实例化类型必须完整,
C
仅完整
关闭大括号后。)

我不确定是否看到您的问题。以下方面没有问题:

class C;
class A
{
    void foo( C& c );
};
(但是,您的
C
有问题。类
C
不能 包含一个
std::vector
,因为
std::vector
要求 实例化类型必须完整,
C
仅完整
(右括号后。)

一个普通的前向声明怎么样?首先,在C++03中,至少在
C
中有一个
向量是未定义的行为。其次,您可以声明
类C
A
之上,允许您使用
foo
声明定义
A
。你应该把
foo
的定义放在class
C
之后。不要继承自
std::vector
。它没有虚拟析构函数(这可能是个问题,也可能不是个问题),但只要让它成为一个成员肯定会改进你的设计。谢谢,我以前从未在类中使用过。对不起,C上的向量是一个复制过去的错误,一个普通的前向声明怎么样,在C++03中,至少在
C
中有一个
vector
是未定义的行为。其次,您可以声明
类C
A
之上,允许您使用
foo
声明定义
A
。你应该把
foo
的定义放在class
C
之后。不要继承自
std::vector
。它没有虚拟析构函数(这可能是个问题,也可能不是个问题),但只要让它成为一个成员,肯定会改进您的设计。感谢我以前从未在类中使用过。对不起,C上的向量是一个复制过去的错误