0
我想學習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
前兩行如預期,但第二個是不是我所期待的,因爲他認爲會像第一個,有人可以解釋我,這是如此,究其原因,如果你請。還是我在做錯誤的問候和感謝閱讀。
用調試信息和所有警告編譯你的程序(例如'g ++ -Wall -Wextra -g',如果使用[GCC](http://gcc.gnu.org/)....)。然後使用調試器(例如'gdb')一步一步地運行它。 –
順便說一句你的問題不清楚。您期待前兩條輸出線,然後說第二條線不是我的預期。閱讀[虛擬方法表](https://en.wikipedia.org/wiki/Virtual_method_table) –
查找「對象切片」。 – Angew