我正在尝试学习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;
}
这个shell出来了;
funcPtr1
funcPtr1_de_Derivada
funcPtr1
funcPtr1
前两行是预期的,但第二行并不是我所期望的,因为他认为这就像第一行,有人可以解释一下,原因就是这样,如果你愿意的话。或者我是在做错误的问候和感谢阅读。
答案 0 :(得分:3)
该行
std::vector<Basefptr> poli1;
告诉向量保存Basefptr
类型的对象。当你
poli1.push_back(base1);
poli1.push_back(derivada1);
向量正在创建具有Basefptr
构造函数的新对象,它拥有自己。这些不是您创建的对象。