为什么会这样?堆,展示了一件事,然后又展示了另一件事

why so? heap, shows one thing and then another

本文关键字:一件 展示了 然后 为什么      更新时间:2023-10-16

我正在努力学习c++,做一些测试,我有以下问题,在某种程度上显示了一件事,另一件事如预期的那样起作用,我会尽力解释,"对不起我的英语,"我有一个或多或少的基类,所以我认为这是重要的部分;

class Basefptr {
public:
    Basefptr();
    virtual ~Basefptr();
    virtual void funcPtr1();
};
inline void Basefptr::funcPtr1(){
    std::cout << "funcPtr1" << std::endl;
}
#endif /* BASEFPTR_H_ */

并且在派生类中,另一个;

#include "Basefptr.h"
class Derivada : public Basefptr {
public:
    Derivada();
    virtual ~Derivada();
    virtual void funcPtr1();
};
inline void Derivada::funcPtr1(){
    std::cout << "funcPtr1_de_Derivada" << std::endl;
}
#endif /* DERIVADA_H_ */

这是主要的;

#include "Basefptr.h"
#include "Derivada.h"
#include <vector>
#include <algorithm>
int main(int argc, char* argv[]){
Basefptr* base     = new Basefptr;
Derivada* derivada = new Derivada;
std::vector<Basefptr*> poli;
poli.push_back(base);
poli.push_back(derivada);

std::for_each(poli.begin(), poli.end(),[](Basefptr* b){
    b->funcPtr1();
});

Basefptr base1;
Derivada derivada1;
std::vector<Basefptr> poli1;
poli1.push_back(base1);
poli1.push_back(derivada1);

std::for_each(poli1.begin(), poli1.end(),[](Basefptr b){
    b.funcPtr1();
});
return 0;
}

这就是外壳;

 funcPtr1 
 funcPtr1_de_Derivada
 funcPtr1 
 funcPtr1

前两行是如预期的,但第二行不是我预期的,因为他相信这会像第一行一样,有人能解释一下我吗,原因是这样的,如果你愿意的话。还是我做错了什么?问候和感谢你的阅读。

std::vector<Basefptr> poli1;

告诉向量保持类型为Basefptr的对象。当你

poli1.push_back(base1);
poli1.push_back(derivada1);

向量正在创建具有Basefptr构造函数的新对象,该构造函数是它自己拥有的。这些不是您创建的对象。