gpt4 book ai didi

C++:我可以在函数调用期间将 vector 转换为 vector 吗?

转载 作者:可可西里 更新时间:2023-11-01 18:27:33 24 4
gpt4 key购买 nike

我有一个现有的类和函数,如下所示:

Class base_class{
...
}

void Func(...,vector<base_class> &vec_b,...){
// inside the function, the vector vec_b is being re-organized and re-sized
}

我定义了一个派生类,如下所示:

Class derived_class: public base_class{
...
}

现在,不改变函数Func ,我可以传递一个 vector<derived_class> 吗?进入Func ,例如:

void main(){
vector <derived_class> d;
Func(...,d,...);
}

派生类 d经历同样的重组和重新调整规模?我知道我可以在函数调用中毫无问题地将派生类转换为基类,但是一旦使用 vector ,似乎有困难?我无法在网上找到答案,因此非常感谢任何建议或帮助。谢谢。

最佳答案

这仅在您使用指针时有效。

如果您不使用指针,则可能会发生切片。例如。

class Base {
protected:
int foo;
};

class Child : public Base {
int bar;
};

class Base只包含一个名为 foo 的整数, 和 class Child包含两个整数,foobar .

Child f;
Base sliced = (Child)f;

这将切片子对象,导致它从对象中删除一些数据。您将无法将父类转换回子类,除非您使用指针。

因此,如果您更改了 vector<>拥有指针而不是类的实例,那么您可以在父/子之间来回转换。

使用类似的东西:

vector<Base*> vec;
vec[0] = static_cast<Base*>(new Child());

...
Func(vec);
...

将允许您将 vector 的成员转换为它们的子类。

关于C++:我可以在函数调用期间将 vector <derived_class> 转换为 vector <base_class> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9365318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com