我很困惑......似乎这两件事情都做同样的事情。我觉得我很混淆名称隐藏与功能覆盖
在这第一个代码中,我相信派生类隐藏了基类的函数名。
#include <iostream>
using namespace std;
class Quadrilateral {
public:
void greeting() {
std::cout << "i am a quadrilateral" << std::endl;
}
};
class Square : public Quadrilateral {
public:
void greeting() {
std::cout << "i am a square" << std::endl;
}
};
class Trapezoid : public Quadrilateral {
public:
void greeting() { //hides greeting from quadrilateral function
std::cout << "Hi I'm a Trapezoid" << std::endl;
}
};
int main()
{
Trapezoid tz;
tz.greeting();
}
这似乎有完全相同的结果:在这里,他们被重写,因为它是虚拟的基类]
#include <iostream>
using namespace std;
class Quadrilateral {
public:
virtual void greeting() {
std::cout << "i am a quadrilateral" << std::endl;
}
};
class Square : public Quadrilateral {
public:
void greeting() {
std::cout << "i am a square" << std::endl;
}
};
class Trapezoid : public Quadrilateral {
public:
void greeting() { //hides greeting from quadrilateral function
std::cout << "Hi I'm a Trapezoid" << std::endl;
}
};
int main()
{
Trapezoid tz;
tz.greeting();
}
所以我想我来真的很迷茫。 ..有什么不同?或者,如果它在这种情况下会产生相同的效果,那么在基类中使它变为虚拟的点是什么?
第二并不能掩盖它,但覆盖它。 –
我知道,但它似乎做同样的事情,无论你重写或隐藏它。那么有什么意义呢? @LuchianGrigore – FrostyStraw
在这两种情况下试试这个:制作派生类的实例。用基类的类型制作一个指针。调用基类指针(实际上指向派生类的实例)的函数。 – BoBTFish