从基数组 class 调用派生函数
Calling a derived function from an array of the base class
如何从基数组 class 调用派生函数?
例如:
#include <iostream>
#include <string>
class a{
public:
virtual void prnt(){
std::cout<<"a"<<std::endl;
}
};
class b: public a{
public:
virtual void prnt(){
std::cout<<"B"<<std::endl;
}
};
int main()
{
a array[3];
array[0] = a();
array[1] = b();
array[2] = a();
array[1].prnt();
}
此示例的输出是 a
。
有办法解决这个问题吗?
正如贾斯汀评论的那样,您正在目睹 object slicing 的案例。获得您期望的行为的一种方法是使用指针:
int main() {
a* array[3];
array[0] = new a();
array[1] = new b();
array[2] = new a();
array[1]->prnt();
// Don't forget to delete them!
for (int i = 0; i < 3; ++i) {
delete array[i];
}
}
array[1] = b();
以上是对象slicing.Read关于它here
多态性仅适用于指针和引用。
a *array[3];
array[0] = new a();
array[1] = new b();
array[2] = new a();
array[1]->print()
如何从基数组 class 调用派生函数?
例如:
#include <iostream>
#include <string>
class a{
public:
virtual void prnt(){
std::cout<<"a"<<std::endl;
}
};
class b: public a{
public:
virtual void prnt(){
std::cout<<"B"<<std::endl;
}
};
int main()
{
a array[3];
array[0] = a();
array[1] = b();
array[2] = a();
array[1].prnt();
}
此示例的输出是 a
。
有办法解决这个问题吗?
正如贾斯汀评论的那样,您正在目睹 object slicing 的案例。获得您期望的行为的一种方法是使用指针:
int main() {
a* array[3];
array[0] = new a();
array[1] = new b();
array[2] = new a();
array[1]->prnt();
// Don't forget to delete them!
for (int i = 0; i < 3; ++i) {
delete array[i];
}
}
array[1] = b();
以上是对象slicing.Read关于它here
多态性仅适用于指针和引用。
a *array[3];
array[0] = new a();
array[1] = new b();
array[2] = new a();
array[1]->print()