C++ 在指针向量中使用基类安全吗
我发现在cpp中,我不能像在java中那样投射对象向量(对不起,我保证我再也不会提到那种语言了,哈哈) …除非我使用指针,但从我在其他帖子上看到的情况来看,似乎需要很多代码才能完成这么简单的事情 所以 我对解决这个问题的方式没有信心(我还不太习惯c++) 如有任何建议,将不胜感激C++ 在指针向量中使用基类安全吗,c++,pointers,vector,C++,Pointers,Vector,我发现在cpp中,我不能像在java中那样投射对象向量(对不起,我保证我再也不会提到那种语言了,哈哈) …除非我使用指针,但从我在其他帖子上看到的情况来看,似乎需要很多代码才能完成这么简单的事情 所以 我对解决这个问题的方式没有信心(我还不太习惯c++) 如有任何建议,将不胜感激 谢谢存储指向基类的指针是安全的。按基类值存储对象是不安全的(它会导致切片) 如果你的设计是好的,当你使用指针的时候,你就不需要向下转换;您应该通过虚拟函数公开所有需要的行为 另外,不要使用void*存储,除非您确信再也
谢谢存储指向基类的指针是安全的。按基类值存储对象是不安全的(它会导致切片) 如果你的设计是好的,当你使用指针的时候,你就不需要向下转换;您应该通过虚拟函数公开所有需要的行为 另外,不要使用void*存储,除非您确信再也不必向下转换到任何其他类型(换句话说,除非您对地址本身感兴趣,而不是其他) 代码:
类连接语句
{
向量句;
...
常量向量&getSentencesAsNodes()常量//通过常量引用返回
//从常量函数
{
返回句子;//现在可以了
}
vector&getSentencesAsNodes()/…或通过非常量ref返回。
//从一个非常量函数
{
返回句子;//现在可以了
}
};
如果按值返回向量,将生成并返回向量的副本
< > >强>编辑< /强>:考虑使用<代码> STD::vector < /代码>或<代码> STD::向量< /代码>,而不是<代码> STD::向量< /代码>。这将使代码更加安全(异常安全)和简单(您不必手动删除节点)
class ConnectedSentence
{
vector<Sentence*> sentences;
...
vector<Node*> getSentencesAsNodes()
{
return sentences; <----compile error of course
}
vector<Node*> sentences
union unifiedObjectPointer
{
Node* nodes;
Sentences* sentences;
}
class ConnectedSentence
{
vector<Node*> sentences;
...
const vector<Node*>& getSentencesAsNodes() const // return by const reference
// from a const function
{
return sentences; // now fine
}
vector<Node*>& getSentencesAsNodes() // ... or by return by non-const ref.
// from a non-const function
{
return sentences; // now fine
}
};