C++ почему вызывается родительский метод, когда у дочернего класса есть свой (метод)?
Есть вот такой код:
#include <iostream>
class computer {
private:
int Vbp;
std::string mthb;
bool nameP; // 1 - Amd; 0 - intel;
public:
computer () {
Vbp = 500;
mthb = "noName";
nameP = 0;
}
void s_Vbp (int Vbp) {
if (Vbp < 500) std::cout << "oh no" << std::endl;
this->Vbp = Vbp;
}
void s_mthb (std::string mthb) {
if (mthb == "BadW") std::cout << "oh no" << std::endl;
this->mthb = mthb;
}
void s_nameP (bool nameP) {
if (nameP != 0) this->nameP = nameP;
}
virtual void nst () {
// std::cout << "V of the block power: " << Vbp << ", name of the motherboard: " << mthb << ", name of the proccesor: " << nameP << std::endl;
std::cout << "hello!!!!!!!!!!" << std::endl;
}
};
class Ucomp : public computer {
public:
void nst () override {
std::cout << "hello, im uwu"<< std::endl;
}
};
class UWcomp : public computer {
public:
void nst () override {
std::cout << "hwllo, im owo" << std::endl;
}
};
int main () {
computer comps[3];
computer My;
My.s_nameP(1);
Ucomp His;
His.s_mthb("Asrock");
UWcomp Her;
Her.s_Vbp(1000);
comps[0] = His;
comps[1] = My;
comps[2] = Her;
Her.nst();
int length = sizeof(comps) / sizeof(comps[0]);
for (int i = 0; i < length; i++) {
comps[i].nst();
}
return 0;
}
строка Her.nst();
выполняется как надо, она выводит hwllo, im owo
НО! То, почему вы видите этот вопрос.
вывод for:
hello!!!!!!!!!!
hello!!!!!!!!!!
hello!!!!!!!!!!
почему такой вывод? разве он не должен быть следующим:
hello!!!!!!!!!!
hello, im uwu
hwllo, im owo
помогите пожалуйста, что не так?
p.s. попытки реализации полиморфизма
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
computer comps[3];
Т.е. у вас происходит срезка потомков до предков.
Хотите полиморфизм? для этого нужны указатели/ссылки.
Посмотрите на вывод у этого кода:
computer * comps[3];
computer My;
My.s_nameP(1);
Ucomp His;
His.s_mthb("Asrock");
UWcomp Her;
Her.s_Vbp(1000);
comps[0] = &His;
comps[1] = &My;
comps[2] = &Her;
Her.nst();
int length = sizeof(comps) / sizeof(comps[0]);
for (int i = 0; i < length; i++) {
comps[i]->nst();
}