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