C++ 在指针向量中使用基类安全吗

C++ 在指针向量中使用基类安全吗,c++,pointers,vector,C++,Pointers,Vector,我发现在cpp中,我不能像在java中那样投射对象向量(对不起,我保证我再也不会提到那种语言了,哈哈) …除非我使用指针,但从我在其他帖子上看到的情况来看,似乎需要很多代码才能完成这么简单的事情 所以 我对解决这个问题的方式没有信心(我还不太习惯c++) 如有任何建议,将不胜感激 谢谢存储指向基类的指针是安全的。按基类值存储对象是不安全的(它会导致切片) 如果你的设计是好的,当你使用指针的时候,你就不需要向下转换;您应该通过虚拟函数公开所有需要的行为 另外,不要使用void*存储,除非您确信再也

我发现在cpp中,我不能像在java中那样投射对象向量(对不起,我保证我再也不会提到那种语言了,哈哈)

…除非我使用指针,但从我在其他帖子上看到的情况来看,似乎需要很多代码才能完成这么简单的事情

所以

我对解决这个问题的方式没有信心(我还不太习惯c++)

如有任何建议,将不胜感激


谢谢

存储指向基类的指针是安全的。按基类值存储对象是不安全的(它会导致切片)

如果你的设计是好的,当你使用指针的时候,你就不需要向下转换;您应该通过虚拟函数公开所有需要的行为

另外,不要使用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
    }
};