为什么会这样?堆,展示了一件事,然后又展示了另一件事
why so? heap, shows one thing and then another
我正在努力学习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
构造函数的新对象,该构造函数是它自己拥有的。这些不是您创建的对象。
相关文章:
- 为什么make_tie不是一件事
- 不知道如何在家庭作业任务中实现一件事
- 一次崩溃了SDL_MIXER;现在,所有使用SDL_MIXER的程序在初始化时崩溃
- <<是一件C++的事情 - 相当于Java。
- 为什么会这样?堆,展示了一件事,然后又展示了另一件事
- 我怎么能知道13号星期五在一年中出现了多少次
- 使用windows.h是一件好事吗?
- C++:关于加载 DLL 和调用函数的一件小事
- 虚拟析构函数会是一件坏事吗?
- 引用或复制结构的结构(已分配的memset)是一件有效的事情
- 我在wxPaint DC绘图中发现了一件奇怪的事情
- 通过多重私有继承扩展类-这是一件事吗
- 一个小而有充分评论的项目,展示了C++的最佳实践
- 加工va_list一件一件
- 没有明显目标的std::cout在已发布代码中是一件不好的事情吗?
- 状态检查总是一件有效的事情吗
- 递归是一件坏事吗?在递归似乎最有用的地方,是否有更清晰或更有效的方法来解决问题?
- 使用 cpp 宏作为脚本语言是一件坏事吗?
- 指针强制转换以满足方法参数是一件危险的事情吗?
- 我做了一件阴暗的事情